Introducción al curso de Biometría

Instructor: Raymond L. Tremblay, PhD

Oficina: NL 104
Teléfono: (787) 850-9497 (dept de biología)
Coreo electronico: raymond.tremblay_at_upr_dot_edu


Horario de clase

Presentación de temas y discusion: M, J at 9:00-10:50am (80 mins) (NOTE: Necesita traer su laptop!)

Hora de consulta con Estudiantes:

  • L & W 9:00 - 10:30
  • L & W 1:00 - 4:30
  • J 1:00 - 2:00


Libro obligatorio.

Aquí dos sitios donde pueden conseguir el libro

Libros sugeridos

• Artículos revisados por pares serán asignados para fomentar el método de utilizar estas herramientas en ciencias.


Programados


Prerequisitos

  • BIOL 3011-3013: Biología General y Laboratorio primer semestre
  • BIOL 3012-3014: Biología General y Laboratorio segundo semestre

Descripción del curso

Estudio de diferentes técnicas estadísticas con aplicación a la Biología. Se enfatizará en la estadística descriptiva, análisis de regresiones y correlaciones, pruebas de hipótesis paramétricas y no paramétricas y análisis de frecuencias y varianza. Se hará énfasis en los supuestos de las pruebas, para seleccionar cual método estadístico es adecuado para el diseño experimental y la distribución de los datos. Además, se utilizarán las computadoras como mecanismos para facilitar y agilizar el cómputo y análisis estadístico.


Objetivos del curso

Al finalizar el curso el estudiante podrá:

  1. Discutir la importancia de la estadística en los estudios biológicos.
  2. Ordenar datos biológicos en forma lógica.
  3. Diferenciar entre los diferentes tipos de datos biológicos.
  4. Diferenciar los diferentes tipos de escalas biológicas.
  5. Organizar y resumir datos en forma de tablas.
  6. Confeccionar polígonos de frecuencia.
  7. Creación de gráficas para demostrar patrones.
  8. Hacer uso adecuado de las diferentes estadísticas descriptivas.
  9. Describir las diferentes medidas de tendencia central.
  10. Basado en las medidas de tendencia central, inferir algunas de las características de la muestra bajo estudio.
  11. Determinar cuándo se deben calcular en forma grupal las medidas de tendencia central y dispersión de la muestra.
  12. Calcular probabilidades en situaciones específicas.
  13. Establecer la diferencia entre distribuciones discretas y continuas.
  14. Formular una hipótesis nula y alterna, adecuada para una situación en particular.
  15. Distinguir de acuerdo al tipo de datos recolectados cuándo utilizar pruebas paramétricas o pruebas no paramétricas.
  16. Evaluar los supuestos de las pruebas, tal como distribución normal e igualdad de varianza
  17. Evaluar la hipótesis nula y determinar el grado de significación de esta hipótesis haciendo uso de los diferentes análisis estadísticos.
  18. Confeccionar tablas de contingencia y establecer homogeneidad.
  19. Determinar cuándo se debe utilizar un análisis de regresión.
  20. Calcular coeficientes de regresión.
  21. Determinar intervalos de confianza y significación de una regresión.
  22. Calcular el coeficiente de correlación.
  23. Realizar comparaciones entre coeficientes de correlación simples.
  24. Desarrollar y analizar diseños experimentales utilizando técnicas de muestreo y recolección de datos apropiados.
  25. Determinar el error de muestra.
  26. Conocer y aplicar las pruebas básicas en estadísticas.
  27. Evaluar situaciones experimentales y poder desarrollar un diseño experimental adecuado y lógico para analizar el problema y llegar a conclusiones.
  28. Se hará énfasis en el uso de programados estadísticos para calcular los índices y probar hipótesis. Los programa de computadora puede incluir R.

Puntuacion:

Este curso sera evaluado con los siguiente items:

Item Valor
Ejercicios práctico (4-6 total) 30%
Pruebas cortas (una por semana) 15%
Participación 10%
Examen parcial # 1 (fecha TBD) 15%
Examen parcial # 2 (fecha TBD) 15%
Examen Final (fecha TBD) 10%

NOTE: Escala de Notas:

  • A (100 to 90)
  • B (89 to 80)
  • C (79 to 70)
  • D (69 to 60)
  • F (< 60)

Examenes:

Habrá dos examen parciales y un examen final comprensivo. Estos exámenes serán de selecciones múltiples, pareo, respuesta corta, y análisis de conceptos. El examen final será comprensivo (incluye todos los temas del semestre). En este examen final se hará énfasis en la comprensión y aplicaciones de los supuestos de las pruebas y la capacidad de seleccionar la prueba correcta basado en el diseño experimental y los supuestos.

Si el examen es vitrual es obligatorio tener la camera prendida durante todo el exámen. No es permitido usar el celular, Ud. tendrá que demostrar que el celular este detrás de uds antes de comenzar el examen


Conferencias

En la clase las notas serán basado primeramente en la participación y algunas pruebas cortas. Su participación es esencial para el aprendizaje (y para un ambiente positivo). Aprender NO es un proceso pasivo: los estudiantes deben participar haciendo preguntas y discutir el material con su conocimiento anterior (Su bagaje de conocimiento).


Ejercicios

Los ejercicios están enfocado en la aplicación de conceptos y métodos discutido en la clase y solución de problemas. Se hará un esfuerza de usar datos reales para demostrar como trabajar con los análisis, tablas, y gráficos en R, RStudio y RMarkdown. Típicamente, tendrán solamente una semana para hacer los ejercicios y entregarlos en formato .html.


Faltar a clase y examen:

Los trabajos cortos y pruebas cortas NO se reponen. Si falta a la clase es su responsabilidad hablar con los otros estudiantes para saber lo que se discutió en la clase. Los examen se reponen solamente por una escusa valida.


Derechos de Estudiantes con Impedimentos

La UPR-Humacao cumple con las leyes ADA (Americans with Disabilities Act) y 51 (Servicios Educativos Integrales para Personas con Impedimentos) para garantizar igualdad en el acceso a la educación y servicios. Estudiantes con impedimentos: informe al (la) profesor(a) de cada curso sobre sus necesidades especiales y/o de acomodo razonable para el curso, en la tarjeta de información de la primera semana y visite la Oficina de Servicios para la Población con Impedimentos (SERPI) a la brevedad posible. Se mantendrá la confidencialidad.


Integridad academica

La Universidad de Puerto Rico promueve los más altos estándares de integridad académica y científica. El Artículo 6.2 del Reglamento General de Estudiantes de la Universidad de Puerto Rico (Certificación Núm. 13, 2009-2010, de la Junta de Síndicos) establece que la deshonestidad académica incluye, pero no se limita a: acciones fraudulentas, la obtención de notas o grados académicos valiéndose de falsas o fraudulentas simulaciones, copiar total o parcialmente la labor académica de otra persona, plagiar total o parcialmente el trabajo de otra persona, copiar total o parcialmente las respuestas de otra persona a las preguntas de un examen, haciendo o consiguiendo que otro tome en su nombre cualquier prueba o examen oral o escrito, así como la ayuda o facilitación para que otra persona incurra en la referida conducta. Cualquiera de estas acciones estará sujeta a sanciones disciplinarias en conformidad con el procedimiento disciplinario establecido en el Reglamento General de Estudiantes de la UPR vigente.


Comentario sobre grabar videos y/o audio de las clases

Los estudiantes no PUEDEN grabar la clase por forma de video o audio sin el permiso del profesor. Algunos estudiantes con necesidades especiales pueden hablar con el profesor para pedir el permiso. La solicitud y aprobación del permiso tiene que ser por escrito (por ejemplo por email).


Espacio libre de acoso sexual

La Universidad de Puerto Rico prohíbe el descrimen por razón de sexo y género en todas sus modalidades, incluyendo el hostigamiento sexual. Según la Política Institucional contra el hostigamiento sexual, en la Universidad de Puerto Rico, Cert. Núm. 130 (2014-2015) de la Junta de Gobierno, si un(a) estudiante está siendo o fue afectado por conductas relacionadas a hostigamiento sexual, puede acudir ante la Oficina del Procurador Estudiantil, el Decanato de Estudiantes o el Coordinador de Cumplimiento con Título IX para una orientación o presentar una querella.


Protocolo de la Clase

Los teléfonos mobiles serán apagado durante la clase. Si necesita una calculadora traerla al salón. El teléfono no debería esta visible durante la clase al menos que pide permiso al instructor. Recuerda que que se usara computadoras portátiles en cada sesión.

Introducción a la Biometria

El libro de la clase

Introductory Biological Statistics by Havel, Hampton and Meiners Presione en el titulo para dirigirlo a Amazon.


Fecha de la ultima revisión

## [1] "2023-07-31"

El proceso de investigación:

En este curso se estará enfatizando los análisis cuantitativo, esto es simplemente que analizamos los datos para llegar a una conclusión o interpretación sobre un tema. Naturalmente el proceso de seleccionar los datos puede ser un reto grande. Como uno selecciona los datos y el desarrollo de la investigación depende del diseño experimental. El diseño es el procedimiento de como uno recolecta los datos y como los vamos a analizar. En este curso no estaremos evaluando métodos cualitativos de análisis. Este método cuantitativo se refiere a evaluar principalmente opiniones, motivaciones o razones que influencia o impacta una situación. En los métodos cuantitativos es necesario que los resultados sean de una forma o otra numéricos o categóricos.

El proceso de investigación cuantitativo tiene múltiples pasos y podemos visualizar los pasos con un diagrama de flujo.

El proceso de Investigación

El proceso de Investigación


El primer paso:

  1. Todo comienza con una pregunta que te llama la intención. Esta pregunta proviene de haber observado tu ambiente. Puede que sea algo muy sencillo (por ejemplo: si la cantidad de estudiantes por salón impacta su rendimiento), o puede ser una pregunta más complicada (por ejemplo cual es el impacto de la lactancia sobre el desarrollo de las células, la bioquímica y inteligencia de los niños).

El segundo paso

  1. El próximo paso es desarrollar una hipótesis. Hay dos tipos de hipótesis, la hipótesis nula y la hipótesis alterna. SIEMPRE uno comprueba la hipótesis NULA. La nula en la en forma más sencilla es que los grupos son iguales. En otra palabra, si regresamos a la pregunta del primer paso, el rendimiento de los estudiantes es irrelevante de la cantidad de estudiantes en el salón en otra palabra es igual si hay pocos o muchos estudiantes. La hipótesis alterna es que “que la cantidad de estudiante en un salón impacta el rendimiento de los estudiantes”. Hay otros tipos de hipótesis nula que veremos más tarde.
  • Si se acepta la hipótesis nula esto quiere decir que NO hay evidencia que los grupos sean diferentes.
  • Si se rechaza la hipótesis nula es que hay evidencia que los dos grupos sean diferentes.

El tercer paso:

  1. Ahora hay que definir cual son las variables (datos) que se van a recolectar para evaluar la hipótesis. Por ejemplo, cuantos grupos de estudiantes se seleccionará (2, 3, 10 salones?), La información se recolectará de cuantos estudiantes por salones (todos, la mitad, los que se aparece, o se seleccionará los estudiantes al azar, y si selecciona al azar cual es el mecanismo para seleccionarlos de esta forma). Cual sera el indice de “rendimiento” (el entusiasmo de cada estudiante, la nota de un examen, de un trabajo, la nota final). Si se selecciona la nota final la información sera la nota numérica o alfabética (A, B, C, D, o F).

Tomando la información anterior en consideración esto determinará el diseño experimental y las pruebas estadísticas que se deberá utiliza en el quinto paso.


El cuarto paso:

  1. Recolectar los datos. Este se debe hacer de una forma sistemática, con la información bien apuntado y subir la información en una hoja de calculo (spreadsheet), como MS Excel, Google Sheet y Numbers. Es mi sugerencia de NUNCA utilizar un programa como SPSS o JMP para poner los datos, ya que con estos programas si en el futuro se quiere tener acceso a los datos, y no tiene el programado o el programado ha cambiado de versión muchas veces los datos no se pueden leer (experiencia personal).

El quinto paso:

  1. En este paso se hará los gráficos y los análisis estadísticos para evaluar la hipótesis.

El sexto paso:

  1. Aceptar o rechazar la hipótesis NULA.

Tipo de error de interpretación en estadística

El concepto básico en estadística, y probablemente el más difícil a captar para algunos es que en el mundo existe la verdad, pero cuando uno recolecta datos, no necesariamente los datos de la muestra representa la verdad o sea la realidad. Por consecuencia siempre hay una posibilidad que los datos nos engaña, y si nos engaña estamos haciendo un error en rechazar o aceptar la hipótesis nula. Por consecuencia aun que uno tome todas las precauciones para tener un diseño experimental adecuado es posible que los datos no representan el universo de los datos (la verdad).

Típicamente se rechaza la hipótesis nula si el valor de p es menor de 0.05. No es necesario que el valor sea menor de 0.05 para rechazar la hipótesis, en cierta condiciones el valor crítico pudiese ser mayor o menor de 0.05. El valor de p represente la probabilidad de rechazar la hipótesis nula cuando se debería aceptar. Por consecuencia un valor de p = 0.05, significa que hay 5% de probabilidad de cometer un error en que rechazamos la hipótesis cuando se debería aceptar si repetimos la investigación 100 veces (una razón de 1:20). Entonces este representa un tipo de error posible, frecuentemente nominado tipo de error 1 o alfa. En otra palabras significa la probabilidad de rechazar la hipótesis cuando uno debería aceptar la hipótesis. El otro tipo de error 2 o beta representa el error de aceptar la hipótesis nula cuando se debería rechazar.

Los tres términos usado en estadística para de los dos tipos de errores

  • Tipo de error I, alfa, falso positivos
  • Tipo de error II, beta, falso negativos

Aquí un gráfico de los tipos de errores. El par de gráficos representa los dos tipos de error y las dos condiciones en que no se hace un error.

El proceso de Investigación

El proceso de Investigación


Ahora vamos a considerar un ejemplo básico de preguntas que se podría evaluar. En este tiempo moderno un tipo de programas a la televisión bien común son los “Reality Shows”. Donde típicamente participa individuos supuestamente “normal” que no sean actores profesionales. Aquí una lista de algunos de los “Reality Shows”.

Consideramos los Reality Shows:

  • Kardashians
  • The Bachelorette
  • Survivors
  • Big Brother
  • Shark Tank
  • Skin Wars
  • Hell’s Kitchen

Personalidad de las personas

Uno se podría preguntar que tipo de persona son seleccionado para participar en estos tipos de programas. Una hipótesis que son gente con tipo de personalidad bien específica. Una hipótesis es que son gente que cumple con unas características tal como Trastorno de personalidad narcisista (TPN): estas personas de vez en cuando caracterizado como megalomanía, demuestran un patrón a largo plazo de comportamiento anormal caracterizado por sentimientos exagerados de importancia personal, necesidad excesiva de admiración y falta de empatía.


En un ejemplo de Field et al. 2014 se demuestra la siguiente información sobre personas que solicitaron ser parte de uno de estos Reality Show que se llama Big Brother.

Una hipótesis es que los productores de estos Reality Shows seleccionan gente con características de TPN más a menudo que las gente que no tienen esta condición. Podemos comprobar esto recolectando datos de los que solicitan y los que fueron aceptado o no a participar en Big Brother (United Kingdom). Se entrevistaron 7662 personas para seleccionar 12, a cada uno se le hizo una prueba si tenia síntomas de TPN.
***

No TNP TPN Total
Seleccionado 3 9 12
Rechazado 6805 845 7650
Total 6808 854 7662

Lo que uno observa es que la gente que son identificado que tiene características que cumple con TPN son más propenso a ser seleccionado para participar en el programa. Si fuese que la selección hubiese sido al azar, uno esperaría solamente 1 o 2 personas al máximo con la condición de TPN, no 9 personas. Más tarde aprenderemos como calcular el valor esperado exacto.


Cuando que una hipótesis no es una hipótesis?

Una hipótesis tiene que ser falsificable

Esto quiere decir hay que tener un mecanismo para determinar la veracidad de una expresión. Por ejemplo en las 4 expresiones siguiente hay 2 que no pueden ser falsificable. El concepto de hipótesis falsificable proviene del filósofo Karl Popper en su libro Logik der Forschung (1934), traducido al español La lógica de la investigación científica. Ahora toma el tiempo de evaluar las siguientes expresiones y trate de determinar si son hipótesis falsificable. Desafortunademente, en el vocabulario popular el términos hipótesis y teoría se usan para describir cualquier pensamiento que la gente QUISIERA que se verídico. También se hace hipótesis o mejor dicho expresiones que no son falsificable. En nuestra sociedad donde cualquier persona se puede llamar un periodista y especialista en un tema los comentarios no falsificable dominan y resulta en confusión para la gente. Es importante en ciencia que los temas, las áreas de investigación sean falsificable.


Ejercicio 1

  • Lin Manuel es el mejor actor del mundo
  • Todos la cisnes son blancos
  • El aumento en producción de semillas en una planta X aumenta con el tamaño poblacional de esta especie.
  • Los Beatles vendieron más discos que cualquier otro grupo artístico.

Evaluación de las expresiones falsificables

  • Lin Manuel es el mejor actor del mundo.

    Esta expresión no es una hipótesis falsificable porque el concepto de mejor es uno que es basado en un juicio individual. En otra palabra como se mide “mejor, y quien toma la decisión sobre este medida cualitativa. Si Ud. proviene de una cultura diferente la apreciación a la música cambia drasticamente.

  • Todos los cisnes son blancos

    El problema con esta expresión es la palabra “Todos”. En ningún momento aun que uno trate nunca se podría encontrar “Todos” los cisnes para evaluar sin son blancos o no. Por consecuencia no es falsificable. El concepto de “Todos” aquí asume que ni uno no sera evaluado, que es imposible.

  • El aumento en producción de semillas en una planta X aumenta el tamaño poblacional de esta especie.

    Este es una hipótesis falsificable por que uno puede hacer un experimento para evaluar la relación que hay entre la producción de semillas y el tamaño poblacional de una especie de plantas.

  • Los Beatles vendieron más discos que cualquier otro grupo artístico.

    Este es una hipótesis falsificable porque se puede contabilizar la cantidad de discos vendidos por los Beatles y otros grupos y determinar si es cierto o no.


Variables Independientes y Dependientes

-La variable Independiente: es la variable que impacta (teóricamente) la variable dependiente (puede ser que no impacta el resultado). Típicamente la x en un modelo es la variable independiente.

-La variable Dependiente: es la variable que recibe el efecto (teóricamente) de la variable independiente. La variable dependiente depende de la variable independiente. Las y’s en un modelo son las variables dependientes.


Niveles de mediciones

Variables continuas

  • Las variables con datos continuos:

    • Son valores que son contiguos o por lo menos existe o pudiese existir los valores intermedios.

    • Ejemplo 1

    • la distancia entre el valor 13 y 15 es igual que 101 y 103, hay dos unidades que los separa.

    • Aunque no se haya observado el 14 ni el 102 en un recogido de datos estos valores tienen potencialmente existir, en otra palabra estos valores son posibles en el universo de los datos.

    • Ejemplo 2

      • Si se mide el tamaño de una célula biológicas en micrómetros (µm, \(10^{-6}\)). Los valores intermedios y contiguos existen. Por ejemplo, el largo de las células de Escherichia coli (E. coli) adulta son de 5.27µm en promedio con una desviación estándar de 0.87µm. Esto significa que hay células de diferentes tamaños que van de menos de 2µm a más de 10µm de largo, y todos los valores pueden existir en este rango (ref: https://doi.org/10.1098/rsos.160417). Más tarde veremos como se puede llagar a la conclusión que las células varían entre 2µm a más de 10µm de largo, cuando uno tiene solamente el promedio y la desviación estándar.

    Ejemplo 3

    • El número de hermanos, si por ejemplo yo pregunto a seis estudiantes cuantos hermanos tiene. Yo podría tener la siguiente lista. Aunque que no hubo ningún estudiante que tenga 1 hermano o 6 hermanos, es posible esta alternativas. Note algo especial aquí es que nadie puede tener 2.4 hermanos, los valores tienen que ser números enteros. Cuando son conteos así, la distribución de los datos provienen frecuentemente de una distribución Poisson (veremos más tarde).
    • Números de hermanos (0, 2, 5, 3, 8, 4)

Varriables Discretas

  • Categórica o Discreta
    • Variables Nominales]
      • Hombres y Mujeres
      • Omnívoro, vegetariano, vegano, carnívoro
  • Variable Ordinal
    • Datos donde hay un orden en los valores
      • primero, segundo, tercero, etc.
      • A, B, C, D, F (nota de estudiantes)
  • Variable Binomio
    • Tiene solamente dos alternativas
      • Vivo o muerto
      • Vive en PR o No vive en PR
      • Esta embrazada o No esta embarazada

Población y Muestreos

Fecha de la ultima revisión

## [1] "2023-07-31"

¿Qué es la estadística?

Usando la definición de Snedecor y Cochran (1989) la estadística son las técnicas para la “recolección, análisis y la habilidad de tener una conclusión de los datos”. También pudiésemos decir que la estadística es el estudio de la incertidumbre.

El concepto de población

Este concepto en estadística es sumamente diferente a la visión popular. En el concepto popular, social y geográfico una población es un conjunto de individuos de una especie o un concepto nacionalista (por ejemplos los Argentinos, o puertoriqueños). Típicamente se refiere a un grupo de individuos en un país, estado. El concepto de población en estadística es diferente en que se refiere a TODOS en el universo. Por consecuencia se fuésemos hacer un estudio de la población de puertoriqueños, tendríamos que incluir a todos ellos irrelevante de donde vive en el planeta. Por consecuencia el concepto de población en estadística siempre se refiere a todos los individuos sin que falte ni uno. Pudiésemos modificar nuestro estudio y decir que se va a estudiar una población más reducida. Por ejemplo la población de los puertoriqueños que viven en Puerto Rico en tal fecha. Aun así seria imposible recolectar datos de cada uno, porque siempre habrá algún individuo que no vamos a poder recolectar los datos. Por consecuencia el concepto de población es uno teórico.


El concepto de muestreo

Un muestreo es el subgrupo de la población, donde el objetivo es que este muestro sea representativo de la población. Por ejemplo un hace una recolección de información para saber cual es el nivel de estrés que la pandemia de COVID-19 tiene sobre los estudiantes universitarios. Seria un trabajo fenomenal recolectar datos sobre TODOS los estudiantes, pero su podría recolectar información sobre un subgrupo de ellos con la espera que los datos represente la población de estudiantes universitarios.


Griego y Latin

Cuando uno quiere referir a la población/parámetro uno utiliza las letras del alfabeto griego y cuando nos referimos a un muestreo se usa la letra del alfabeto en latín.

En la siguiente tabla se observa algunos de los variables que veremos en los módulos siguientes. En los próximos módulos regresaremos al significado de estos parámetros.

library(gt)
library(knitr)
library(kableExtra)
df <- data.frame(variable = c("Promedio", "Mediana","Varianza", "Desviación Estandar", "Proporción"),
                 Griego = c("$$\\mu$$", "$$\\theta$$", "$$\\sigma_{ }^2$$","$$\\sigma$$", "$$p$$"),
                 Latin = c("$$\\bar{x}$$","$$M$$","$$s_{ }^2$$","$$s$$" ,"$$\\hat{p}$$"))

kable(df, escape=FALSE)
variable Griego Latin
Promedio \[\mu\] \[\bar{x}\]
Mediana \[\theta\] \[M\]
Varianza \[\sigma_{ }^2\] \[s_{ }^2\]
Desviación Estandar \[\sigma\] \[s\]
Proporción \[p\] \[\hat{p}\]

La verdad versus un estimado

Cuando uno hace una investigación esta buscando la “verdad” en otra palabra estamos a la búsqueda de la información de la población. Desafortunadamente raramente podemos tener TODA los datos por consecuencia esperamos que la muestra sea una buena representación de la “verdad”. Por consecuencia se espera que el promedio de la muestra se acerca a promedio del universo (la verdad). Matemáticamente uno lo puede escribir de la siguiente manera \(\overline{x}\approx\mu\). El gran problema en la ciencia es que nunca estamos 100% seguro de los trabajos de investigación porque nunca sabemos el \(\mu\). Este valor es casi siempre desconocido.

Muestreos al azar

Una de las áreas de estudio importante es saber organizar un estudio para responder a unas preguntas y que no sea sesgado (en ingles “bias”). Cuando se selecciona los datos necesitamos asegurar que los datos sean representativos de la población de interés, el \(\mu\). Si por ejemplo queremos saber el nivel de colesterol en la población de puertoriqueños que viven en Puerto Rico el diseño del muestreo tiene que tomar en cuenta ese grupo y la muestra tiene que representar ese grupo.

Pregunta corta: Explica el sesgo de los diferentes métodos, como se podría mejorar el muestreo?

  1. ¿Cual de las siguientes alternativas es un mejor diseño experimental para deteminar el nivel de colestrerol de los puertoriqueños que viven en Puerto Rico?
  • Se muestrea estudiantes de la clase de biometría de la UPRH
  • Se muestrea paciente que llegan a la oficina de un medico
  • Se muestrea paciente que llegan a la sala de emergencia
  • Se muestrea gente de multiples edades
  • Se muestrea gente de multiples edades y distribuido por toda la isla

Error de muestreo: Precisión, Exactitud y Sesgos

Inferencias y Hipótesis

Fecha de la ultima revisión

## [1] "2023-07-31"

Introducción

Los parámetros versus un muestreo:

En algunos instancia se podría calcular el parámetro (por ejemplo el promedio) en otra palabra la población (todos los individuos sin que falte ni uno). Si es así tenemos todos los datos. Por ejemplo si la población es cuantos médicos fueron infectado por el COVID-19 en un hospital especifico entre una fechas delimitada es probable que se puede conseguir la información de cada un los médicos, y se podría calcular la proporción de infectado.

Pero cuando la población es más grande será necesario tener solamente una muestra de la población, si se usa un método al azar de recolección de los datos uno podría inferir cual es el estado basado en las estadística recolectada.

Ejemplo 1:

Por ejemplo en un estudio hecho por la Dra. Patricia Burrowes sobre la frecuencia de una infección común de los coquí ella evaluó la presencia del hongo sobre la piel de estos anfibios y encontró que los individuos en bosque nublado eran más frecuentemente infectado que los del bosque enano. Ella y sus estudiantes muestrearon 299 individuos del bosque nublado y 130 del bosque enano, este esfuerzo fue muy grande. Encontrar los coqui en el campo no fácil y no hay manera de conseguir todas las pequeñas ranas.

  1. Costo potencial en aptitud evolutiva de Batrachochytrium dendrobatidis en Eleutherodactylus coqui, y comentarios sobre el riesgo de infección relacionado con el ambiente”. El tamaño corporal (longitud hocico acloaca) en adultos de Eleutherodactylus coqui infectados y no infectados con Batrachochytrium dendrobatidis (Bd) fue comparado para determinarel costo potencial en aptitud evolutiva de quitridiomicosis en poblaciones resistentes. Los estudios fueron realizados en dos tipos de bosque a diferentes elevaciones, Bosque Nublado (650 m) y Bosque Nublado Enano (850 m), en El Yunque, Puerto Rico. Nuestros resultados demuestran que los machos infectados con Bd son significativamente más pequeños que los no infectados en el Bosque Nuboso, sin embargo no sucede lo mismo en el Bosque Nublado Enano. Aunque las hembras que están infectadas por Bd también son más pequeñas que las no infectadas, este efecto no es estadísticamente significativo. La prevalencia de Bd y la probabilidad de infección por este hongo son significativamente más altas en el Bosque Nublado (44.1%) que en el Bosque Nublado Enano (20.7%) para ambos sexos. Reportamos las diferencias en factores ambientales en estos dos tipos de bosque en Puerto Rico y discutimos las implicaciones en el crecimiento de Bd y la vulnerabilidad de las ranas a la infección por este patógeno. > > > Burrowes, P. A., A. V. Longo, and C. A. Rodríguez. 2008b. Potential fitness cost of Batrachochytrium dendrobatidis in Eletherodactylus coqui, and comments on environment-related risk of infection. Herpetotropicos 4:51-57.

Ejemplo 2:

En este segundo ejemplo se demuestra la eficiencia de dos vacunas para proteger del virus papiloma humano (VPH) que es una causa principal del cáncer del útero. Hay un estimado que 25% de los adultos están infectado por HPV en un momento en su vida (Lowndes, doi: 10.1017/S0950268805005728) y que este cáncer es el segundo más común en el mundo (Bosch et al. 2002, doi: 10.1136/jcp.55.4.244). El siguiente ejemplo demuestra que las vacunas pueden ser muy efectiva.

¿Qué tan eficaces son las vacunas contra el VPH?

Las vacunas contra el VPH son altamente eficaces para prevenir la infección por los tipos de VPH a los que atacan cuando las vacunas se administran antes de la exposición inicial al virus — es decir, antes de que el individuo tenga actividad sexual.

  1. En los estudios que llevaron a la aprobación de Gardasil y de Cervarix, se encontró que estas vacunas proveen casi 100 % de protección contra infecciones persistentes del cuello uterino por los tipos 16 y 18 de VPH y contra los cambios celulares del cuello uterino que pueden causar estas infecciones persistentes.Gardasil 9 es tan eficaz como Gardasil para la prevención de las enfermedades causadas por los cuatro tipos de VPH (6, 11, 16 y 18), según reacciones similares de anticuerpos en participantes de estudios clínicos. Los estudios que llevaron a la aprobación de Gardasil 9 encontraron que es casi 100 % eficaz en la prevención de enfermedades cervicales (de cuello uterino), de vulva y de vagina causadas por los otros cinco tipos de VPH (31, 33, 45, 52 y 58) a los que se dirige (4). En un documento de posición de 2017, la Organización Mundial de la Salud declaró que las vacunas contra el VPH tienen una eficacia equivalente (5). Se ha encontrado que Cervarix provee protección parcial contra algunos otros tipos de VPH que pueden también causar cáncer pero que no están incluidos en la vacuna, un fenómeno llamado protección cruzada (6). >

Fuente de información: https://www.cancer.gov/espanol/cancer/causas-prevencion/riesgo/germenes-infecciosos/hoja-informativa-vacuna-vph

Inferencias en estadística

El concepto de inferencias en estadística se refiere al proceso de hacer conclusiones basado en un muestreo. Por ejemplo en el primer ejemplo de la infección de hongos en los coquis, uno podría inferir que la proporción de ranas infectada será igual (o muy similar) en otros bosques nublados y enanos de Puerto Rico.

Hipótesis

En la sección 6.2 del libro de Havel et al. leer y evaluar la tabla 6.2 para tener unos ejemplos de expresiones que no son una hipótesis y lo que es son. NOTA: importante es el autor menciona aquí son las hipótesis alterna, en otra palabra los que uno piensa que podría ocurrir. Pero esa no es la hipótesis que se prueba, lo que se prueba es la hipótesis NULA, Ho. Cuando se dice la hipótesis NULA es que no hay diferencias entre los grupos. Vea la tabla 6.2 del libro para más ejemplos.

Ejemplo de hipotesis Nula y Alterna

NULA, Ho ALTERNA, Ha No es una hipótesis
1 Tratamiento con la vacuna de Salk no tiene efecto sobre el riesgo de infección de polio en niños El efecto de la vacuna Salk reduce el riesgo de infección de polio en los niños El polio es malo
2 Los Beatles no vendieron más discos que cualquier otros grupos de rock Los Beatles vendieron más discos que cualquier otro grupo de rock La música delos Beatles es obsoleta

El valor de p

El valor de p es la probabilidad de tener una estadística tan extrema si la hipótesis es verdad (en otra palabra la Ho es la correcta). Uno podría decir que es un indice de la evidencia CONTRA la hipótesis NULA. PERO NOTA es incorrecto decir que es la probabilidad que la Ho es correcta.

Antes de comenzar a hacer el estudio se debería a priori tener una decisión cual sera el nivel de alpha, \(\alpha\) para rechazar la hipótesis nula. Típicamente el valor critico de \(\alpha\) es 0.05 o 5%. Esto quiere decir que si uno repite el experimento 100 veces 5 veces la investigación nos va a dar una resultado equivocado. Que se rechaza la Ho cuando se debería aceptar. Esto una vez en cada 20 experimentos con las mismas condiciones. En muchas ramas de investigación como la física el nivel de \(\alpha\) es frecuentemente 0.01 o menos.

Los errores de tipo I y tipo II

Vea el modulo T1.

El poder de las pruebas inferenciales y lo parámetros que lo influencia

Si la hipótesis nula es falsa es probable que se podría rechazar con cierta confianza. El complemente de beta, \((1-\beta)\) es la prueba de poder. La prueba de poder es la probabilidad de correctamente rechazar la hipótesis nula falsa. Para aclara la \(\beta\) es la probabilidad de cometer un error tipo II. El Poder es \((1-\beta)\) es la probabilidad de correctamente rechazar una hipótesis nula falsa.

Evalúa el siguiente gráfico:

La prueba de poder es influenciada por tres propriedades.

  • El nivel del tipo de error I, o sea el \(\alpha\).
  • La diferencia entre dos promedios que queremos evaluar.
  • El tamaño de muestra (n).

La linea vertical entrecortada representa el valor critico. El área gris obscuro representa el error \(\alpha\), la probabilidad de rechazar la hipótesis nula cuando debería aceptar la hipótesis nula. El área gris liviano representa el error \(\beta\).

Una ilustración de como el \(\alpha\) afecta el \(\beta\)

Historia breve de la estadística

Fecha de la ultima revisión

## [1] "2023-07-31"


La dama degustando té

Era una tarde de verano en Cambridge, Inglaterra, a finales de la década de 1920. Un grupo de profesores universitarios, sus esposas y algunos invitados estaban sentados alrededor de una mesa al aire libre para tomar el té de la tarde. Una de las mujeres insistía en que el té era diferente dependiendo de si el té se vertía en la leche o si la leche se vertía en el té. Las mentes científicas entre los hombres se burlaron de esto como una tontería. ¿Cual podría ser la diferencia? No podían concebir ninguna diferencia en la química de las mezclas que pudieran existir. Un hombre delgado y bajo, con anteojos y una barba de Vandyke que empezaba a ponerse gris, se abalanzó sobre el problema. “Probemos esta propuesta”, dijo emocionado. Comenzó a esbozar un experimento en el que a la señora que insistía en que había una diferencia se le presentaría una secuencia de tazas de té, en algunas de las cuales se había vertido la leche en el té y en otras se había vertido el té en la taza de leche. Cuento del libro de “The Lady Tasting Tea: How Statitics Revolutionized Science in the Twentieth Century” por David Salslburg. Traducido por la pagina de Google Translation.

Así comienza el libro de Salsburg (2001), para describir el comportamiento de los científicos cuando están animados de su tema y el deseo de resolver un enigma. Esa persona con barba de Vandyke era Ronald Aylmer Fisher (1890 -1962) es reconocido como responsable de la estadística moderna y una de las personas más importante en el área en el siglo 20. Su contribuciones han tenido un impacto en muchas áreas incluyendo la genética mendeliana y la selección natural.

Definición de lo que es la estadística

La estadística es un área de la ciencia de datos que utiliza valores numéricos para evaluar patrones y inferir situaciones futuras. Esta definición es sencilla, pero incluye muchos temas pero lo más importante es el componente de utilizar datos, resumiendo estos en indices o parámetros y utilizar estos para predecir/inferir el futuro. La palabra estadística usado en el termino más o menos similar a su definición de hoy probablemente origina del alemán Statistik por Gottfried Achenwall (1749). Donde el termino era para la descripción de datos del estado. Es solamente en 1791 por Sir John Sinclair que el termino comenzó a ser utilizado para la descripción de conjuntos de datos en general sin ser limitado a datos de un estado/pais.

Introducción a la Historía de la Estadística.

Al principio en el siglo 18 el termino estadística era designar la colección información sobre la población y la economía de diferentes regiones o países. En este periodo el objetivo era tabular la información, por ejemplo cuanta gente en un área, cuantas vacas hay, cuanta gente son parte de la nobleza.

Por ejemplo uno de las primeras encuesta para determinar la estadística de una población fue hecha por John Gaunt (1662) titulado Natural and Political Observations Made upon the Bills of Mortality y puede encontrar el libro original aquí http://www.neonatology.org/pdf/graunt.pdf. En el libro expone que 1/3 parte de los niños antes de la edad de 16 mueren en Londres, Inglaterra.

Aquí un extracto de una de estas tablas de las causas de enfermedades y mortandad en Londres en el año 1632. Note que antes de este trabajo esto datos era bien raro y inexistente en la mayoría de las ciudades o países.

Note algunos causas principales de mortandad, “Aged” (628), que la persona es de edad mayor, y “Abortive and Stillborn” que natimuerto (445). Algunos se considerara raros hoy en día es morir de “grief” o sea de tristeza (11).

Gaunt Disease Tables

Gaunt Disease Tables

El otro componente importante de la estadística fue el desarrollo de las probabilidades en el siglo 17 y 18. La gente le gustaba (como hoy en día) hacer apuestos y jugar cartas para dinero. Entonces mucha gente trataba de entender las diferentes probabilidades de ganar en estos juegos de azar para poder aumentar su probabilidad de ganar en estos juegos.


Gertrude Mary Cox

Trabajo presentado por Abimelys Anaya (estudiante de la Universidad de Puerto Rico en Humacao)

Gertrude Mary Cox fue una destacada e importante estadística estadounidense. Nació el 13 de enero de 1900 en una granja cerca a Dayton, Iowa; y falleció a los 78 años, el 17 de octubre de 1978 en Durham, Carolina del Norte, a causa de leucemia. Compartiendo su hogar con 3 hermanos, se dice que su familia era muy unida, pero Cox era específicamente más cercana a su madre, Hemma, de quién heredó su pasión por ayudar a los demás.

Cursó sus primeros estudios en la llamada Perry High School de la misma ciudad. Su amor por los deportes competitivos, hizo que formara parte del equipo de baloncesto en dicha escuela. No fue hasta 1925, luego de haber trabajado un tiempo como diaconisa de la Iglesia Metodista, que sintió interés en continuar estudios graduados en Iowa State College en Ames con concentración en matemáticas, debido a que su cargo en la iglesia requería un grado universitario. Logrando así en 1931, alcanzar una maestría en estadística. Desde ese mismo año hasta el 1933, terminó estudios de posgrado en estadística psicológica en la Universidad de California. Posteriormente, regresa a Iowa, donde participó en la inauguración del Laboratorio de Estadística y comienza su investigación en base al diseño experimental. Fue dicha carrera y el empeño depositado en la misma, quien le permitió dejar una gran aportación en procesos que utilizamos y que conocemos hoy día de esta rama de la ciencia.


Primera dama en Estadística

En 1939, la nombraron profesora asistente en Iowa State College y, en 1940, dirigió el primer departamento de Estadística Experimental en la Escuela de Agricultura de la Universidad de Carolina del Norte. Esto la convirtió en la primera mujer directora del recinto. Además, Cox fue la primera mujer jefa del Instituto de Estadística de la Universidad de Carolina del Norte en 1944. Un año más tarde, participó como editora principal de la revista Biometrics durante 10 años, y fundó, en 1947, la ¨International Biometric Society¨. Además, se convirtió en presidenta de la ASA (American Society of Anesthesiologists) en 1956.


Revista Biometrics

La revista7 fue publicada por la Sociedad Internacional de Biometría en 1945, originalmente bajo el título de Biometrics Bulletin. Sin embargo, en 1947, su nombre fue acortado. Su objetivo principal consiste en publicar artículos sobre la aplicación de la estadística y las matemáticas a las ciencias biológicas. Según una encuesta realizada por especialistas en biometría, obtuvo el quinto lugar entre 40 revistas existentes de estadítica.


Libro: Diseños Experimentales

¿Qué es el diseño experimental? Este consiste en la identificación y cuantificación de las causas de un efecto provocado sobre otra variable de interés durante un estudio experimental.

En 1950, Gertrude M. Cox junto a William Cochran, publicó Experimental Design, libro utilizado por años, y que actualmente permanece accesible, como primera referencia para el diseño experimental. En este, podemos encontrar la expansión de sus notas mimeografiadas de las clases de diseño que brindaba a sus estudiantes. El libro enfatiza tres principios: (1) los estadísticos deben participar en la investigación desde las etapas de planificación, es decir, primeros pasos, el establecimiento de los objetivos del experimento y la planificación del análisis; (2) aleatorizar todo lo que se pueda aleatorizar; y (3) utilizar el bloqueo, siempre que sea posible, para reducir los efectos de variabilidad, donde los bloques son grupos homogéneos de unidades experimentales.

Según menciona Sharon L. Lohr en un artículo para ¨Notices of the American Mathematical Society¨4, en él ¨podemos encontrar planos detallados para el cuadrado latino, factorial, factorial fraccional, parcela dividida, celosía, bloque incompleto balanceado y otros diseños. Cada descripción de diseño comenzaba con ejemplos, seguida de una discusión sobre cuándo el diseño era adecuado e instrucciones detalladas de cómo realizar la aleatorización. Luego, vino uno o más estudios de casos detallados, que muestran por qué ese diseño había sido elegido para cada experimento y cómo había sido aleatorizado, tomando al lector paso a paso a través de los cálculos necesarios para construir el análisis de varianza y estimar los errores estándar para diferencias de medias de tratamiento. Los autores también discutieron cómo estimar la eficiencia del diseño en relación con un diseño completamente aleatorio y cómo hacer los cálculos para la estructura desequilibrada que resultó cuando uno o más ejecuciones experimentales tenían datos faltantes¨.


Últimas aportaciones

Gertrude M. Cox se retiró en 1960 del Instituto de Estadística, para dirigir la División de Investigación Estadística del RTI (Research Triangle Institute), donde fue asesora desde el 1965. Finalmente, se dedicó a distribuir sus conocimientos en estadística al exterior. Realizó 23 viajes internacionales, entre los cuales se encontraban los países de Egipto y Tailandia.

Otros reconocimientos

  • 1944 - Socia de la Asociación Americana de Estadísticas y del Instituto de Estadísticas Matemáticas.

  • 1949 - Primera mujer electa en el Instituto Internacional de Estadística.

  • 1957 - Socia de honor de ¨Royal Statistical Society¨.

  • 1959 - Recibe premio O. Max Gardner por parte de la Universidad de Carolina del Norte por su “contribución al bienestar de la raza humana”.

  • 1975 - Electa en la Academia Nacional de Ciencias.

  • 1977 - La universidad de Carolina del Norte, creó una beca de investigación de $200,000 en su honor.

  • Defendió el uso de computadoras electrónicas para el trabajo estadístico.


Sin lugar a dudas, fue pionera de lo que actualmente nos permite, de manera fácil, realizar investigaciones cuantitativas y que son, y han sido desde entonces, de suma importancia para nuestro entendimiento en las ciencias biológicas.


Referencias

1 Anderson, R.L. (1900-1978). Gertrude Mary Cox. Recuperado el 13 de septiembre de 2020, de http://www.nasonline.org/publications/biographical-memoirs/memoir-pdfs/cox-gertrude.pdf

2 Biometrics (journal). (2020). Recuperado el 13 de septiembre de 2020, de https://en.wikipedia.org/wiki/Biometrics_(journal)

3 Gertrude Cox. (2020). Recuperado el 13 de septiembre de 2020, de https://es.wikipedia.org/wiki/Gertrude_Cox

4 Lohr, S.L. (2019). Gertrude M. Cox and Statistical Design. Recuperado el 13 de septiembre de 2020, de https://www.ams.org/journals/notices/201903/rnoti-p317.pdf

5 Mujeres con ciencia. (2014). Gertrude Cox, la primera dama de la Estadística. Recuperado el 13 de septiembre de 2020, de https://mujeresconciencia.com/2014/06/09/gertrude-cox-la-primera-dama-de-la-estadistica/

6 Universidad de Colima. (2020). Diseño experimental. Recuperado el 13 de septiembre de 2020, de https://recursos.ucol.mx/tesis/diseno_experimental.php

7 Welsh, A., Ghosh, D., Brewer, M. y Molenberghs, G. (1999-2020). Biometrics, Journal of the International Biometric Society. Recuperado el 13 de septiembre de 2020, de https://onlinelibrary.wiley.com/journal/15410420


Algunos personas importantes

  1. Trabajo grupo de 2: 10 puntos. PARTE de las destrezas que estará aprendiendo en adición de conocer un estadístico es como preparar un documento en .Rmd para hacer una documento. Se someterá tanto el documento en .html y .Rmd en MSTeam.
    Se seleccionará uno de las personas abajo y se hará una pequeña biografía sobre esta persona (3 paginas). Debe incluir diferentes componentes.
  2. Información personal de la persona
  3. Su carrera de estudio
  4. Su aportación a la estadística
    • Cual método estadístico desarrolló (seleccioné uno para explicar, aunque puede mencionar múltiples).
    • Por qué este método fue innovador
    • Cuantos papers a publicado (busca en Google scholar)
    • Pon una formulas matemáticas con explicaciones de una de las aportaciones en estadística.
    • fotos/pintura de la persona
    • literatura citada
  5. El trabajo debería ser montado en .Rmd

Lista de estadísticos

  • Florence Nightingale
  • Gertrude Mary Cox
  • Enid Charles
  • Grace Wahba
  • Ronald Fisher
  • Reverand Thomas Bayes
  • John Tukey
  • Karl Pearson
  • Carl Gauss
  • Bradley Efron
  • Andrey Nikolayevich Kolmogorov
  • Pierre-Simon Laplace
  • George Box
  • Francis Galton
  • Andrey Markov
  • Samuel S. Wilks

Formula

Vea este enlace.

https://rpruim.github.io/s341/S19/from-class/MathinRmd.html

Localizado en el centro y una linea parte \[\sum_{n=1}^{10} n^2\]

Localizado en la misma linea \(\sum_{n=1}^{10} n^2\)

Fecha de la ultima revisión

## [1] "2023-07-31"

library(ggplot2)
library(Hmisc)
library(gridExtra) # Un paquete para organizar las figuras de ggplot2
library(statip)

Medida de tendencia central

La medidas de tendencia central se llaman así, porque el valor indica la distribución de los datos y los indices tiende a estar en el centro de la distribución. Hay por lo menos 16 tipos de medidas de tendencias centrales https://en.wikipedia.org/wiki/Central_tendency. En este curso estaremos solamente mencionado 3 de estas medidas.

  • El promedio a arithmetico
  • La mediana
  • La moda

Calculando el promedio

Aquí creamos una lista de datos con la función c( ) y con la función mean podemos calcular el promedio. El promedio es la suma de los valores divido por la cantidad de valores en la lista.
\[\bar{x}=\frac{\sum_{i=1}^{n}x_i}n\]

x=c(0,1,2,3,4,5,6,7,8,9,10)

mean(x)
## [1] 5

Cuando el promedio no esta localizado en el centro

Digamos que yo tengo la cantidad de semillas producida por 11 plantas, la primera no produjo semillas, la segunda 2 semillas y subsiguientemente hasta la ultima que tuvo una producción de 1000 semillas. Nota que en este caso el promedio no se encuentra el el centro de los datos, por consecuencia NO es un buen indicador de la tendencia central de los datos. Cuando esto ocurre uno no debería usar el promedio para describir la tendencia central de los datos.

x=c(0,1,2,3,4,5,6,7,8,9,1000)
sum(x)/length(x)
## [1] 95
mean(x)
## [1] 95

La mediana

Con n impares

Cuando el promedio no es indice adecuado de la tendencia central tenemos dos alternativas, la mediana y la moda. La mediana es el valor en el centro después de haber organizado los datos del más pequeño al más grande.

\[Mediana\ =\frac{\left({x}_{n+1}\right)^{th}}{2}\] Donde n es la cantidad de valores en orden del más pequeño al grande. Por consecuencia se selecciona el valor en el centro de todos los valores. Lo que la función de mediana hace es poner los valores en orden y después determina cual es el valor en el centro. Aquí para demostrar los que hace la función 1) creo un una lista de valores, 2) pongo los datos en orden 3) y mirando los valores en orden vemos que el valor 6 es el valor en el centro. Pero este paso no es necesario ya que la función median lo hace automaticamente.

b=c(247,0,3,43626,26,23,1,2,4,5,24,6,7)
b=sort(b)
length(b)
## [1] 13
median(b)
## [1] 6

Con n pares

Cuando hay una cantidad de datos pares, los dos valores en el centro son sumado y el promedio es calculado.

\[Mediana\ =\frac{1}{2}* (\frac{\left({x}_{n+1}\right)^{th}}{2}+\frac{\left({x}_{n+1}\right)^{th}}{2})\] En el siguiente caso tanto el valor de 6 y 7 se encuentra en el centro, por consecuencia la mediana es el promedio de estos valores.

b=c(247,0,3,43626,26,23,1,2,4,5,24,6,7,7)
b=sort(b)
b
##  [1]     0     1     2     3     4     5     6     7     7    23    24    26
## [13]   247 43626
median(b)
## [1] 6.5

La moda

La moda es el valor más común. Parta encontrar la moda, hay que instalar dos programas. Primero instalar devtools y despues correr el siguiente chunk para instaslar el package modeest, para mode estimates. Quitar # para correr la función.

Activar el packete

library(statip)

Ya pueden ahora usar la mfv para encontrar la moda de conjunto de datos. Lo que vemos es que el valor de 7 es el más comun en la lista de datos.

statip::mfv1(b)
## [1] 7

Cuando es que el promedio, mediana y moda son iguales?

Los tres valores de tendencia central son iguales cuando la distribución es normal, conocida también como en forma de campana. Aquí preparo un lista de datos con distribución normal, y evaluamos donde están los tres valores de tendencia central. Se usa la función rpois, para crear un conjunto de datos al azar con 100000, datos, un promedio de 100.

df=rpois(5000, 100)
df1=data.frame(df)
head(df1, n=2)
##    df
## 1  93
## 2 119

Lo que uno observa es que los tres valores son muy cercano uno del otro.

library(statip)
#mean(df1$df)
#median(df1$df)
#statip::mfv(df1$df)

Podemos visualizar estos datos usamos dos gráfico, En el gráfico de la izquierda se ve una distribución normal con las tres lineas (promedio, mediana y moda). En el gráfico de la derecha se observa la misma información pero solamente los valores entre 96 y 101. Se observa que la mediana y el promedio son igual y la moda varia un poco, se encuentra donde la barra es más alta. Se observa que los tres valores son cerca del centro.

pro=mean(df1$df)
med=median(df1$df)
mod=statip::mfv(df1$df)
a=ggplot(df1, aes(df))+
  geom_histogram(fill="orange", colour="white", binwidth = 1)+
  geom_vline(aes(xintercept = pro), colour="red")+
  geom_vline(aes(xintercept = med), colour="blue")+
  geom_vline(aes(xintercept = mod), colour="green")+
  theme(legend.position = "none")
a

b=ggplot(df1, aes(df))+
  geom_histogram(fill="orange", colour="white", binwidth = 1)+
  geom_vline(aes(xintercept = pro), colour="red")+
  geom_vline(aes(xintercept = med), colour="blue")+
  geom_vline(aes(xintercept = mod), colour="green")+
  xlim(94,105)+
  theme(legend.position = "none")
gridExtra::grid.arrange(a,b, ncol=1)


Distribución cuando los tres valores de tendencia centrtal no son iguales.

En estas distribuciones uno observa que hay exceso de vaslores pequeños o grande. Esto resulta en que los tres indices de tendencias centrales no se encuentra cerca uno del otro.

library(tidyverse)
dfb1=round(rbeta(10000, 3,1, ncp = 0),3)
dfb1=tibble(dfb1)
#head(dfb)
df2= round(rbeta(10000, 1,3, ncp = 0),3)
df2=tibble(df2)
#head(df2)
  1. ¿Cual es la linea de promedio, moda y mediana en cada gráfico?
mea=mean(dfb1$dfb1)
med=median(dfb1$dfb1)
mod=statip::mfv1(dfb1$dfb1)

meab=mean(df2$df2)
medb=median(df2$df2)
modb=statip::mfv1(df2$df2)


SesgadoDerecho=ggplot(dfb1, aes(dfb1))+
  geom_histogram(fill="orange", colour="white")+
  geom_vline(aes(xintercept = mea), colour="red")+
  geom_vline(aes(xintercept = med), colour="blue")+
  geom_vline(aes(xintercept = mod), colour="green")+
  theme(legend.position = "none")

SesgadoIzquierda=ggplot(df2, aes(df2))+
  geom_histogram(fill="orange", colour="white")+
  geom_vline(aes(xintercept = meab), colour="red")+
  geom_vline(aes(xintercept = medb), colour="blue")+
  geom_vline(aes(xintercept = modb), colour="green")+
  theme(legend.position = "none")

SesgadoDerecho

SesgadoIzquierda

library(ggpubr)
#ggarrange(c,d, nrow=2, ncol=1)

library(grid)
#grid.arrange(rectGrob(), rectGrob())
#marrangeGrob(c,d, nrow=2)
#c
#d
#library(scater)
#multiplot(c,d, ncol=2)

Variables binomial

En el siguiente ejemplo podemos ver claramente que las medidas de tendencias central no son adecuada.

Primero producimos un conjunto de datos que tiene solamente dos alternativas 0 y 1. Para facilitar los datos e imaginar lo que quiere decir estos datos que cuando es un 0 la persona no tiene hijos y cuando es un 1 tiene hijos.

dfBin=replicate(10000,rbinom(length(.6), size=1,prob =0.6))
dfBin=data.frame(dfBin)
head(dfBin)
##   dfBin
## 1     1
## 2     1
## 3     0
## 4     1
## 5     0
## 6     1

Ahora vamos a producir el gráfico. Lo que uno observa es que el promedio esta en el centro cerca de .6, pero no hay ningún dato cerca del promedio. El promedio no representa la “tendencia central” de la distribución.

mea=mean(dfBin$dfBin)
med=median(dfBin$dfBin)
mod=mfv(dfBin$dfBin)
mea
## [1] 0.5953
ggplot(dfBin, aes(dfBin))+
  geom_histogram(fill="orange", colour="white")+
  geom_vline(aes(xintercept = mea), colour="red")+
  geom_vline(aes(xintercept = med), colour="blue")+
  geom_vline(aes(xintercept = mod), colour="green")+
  theme(legend.position = "none")

Medidas_de_dispersión

## [1] "2023-07-31"

library(ggplot2)
library(Hmisc)
library(gridExtra) # Un paquete para organizar las figuras de ggplot2
library(gt)
library(tidyverse)

Qué es la dispersión en estadística

Las medidas o indices de dispersión, son indicadores de cuan variable los datos son uno del otro. Si todos los valores tienen el mismo valor no hay dispersión. Hay múltiples indices de dispersión vamos a evaluar solamente algunos de estos indices, para más información pueden ir al siguiente enlace https://en.wikipedia.org/wiki/Statistical_dispersion.

Los indices que estaremos estudiando son los siguientes

  • el rango
  • la varianza
  • la desviación estándar
  • el error estándar
  • el rango intercuartil
  • el intervalo de confianza de 95%

Vizualizando la dispersión

Primero miramos un gráfico donde tenemos datos donde el promedio es igual pero la dispersiones son diferentes. Lo que uno observa es que en la distribución azul los datos son más similares uno al otro y la distribución roja los valores son más diferentes. En el primer conjunto de datos se usa 500 valores con un promedio de 100 y una desviación estándar de 10, en el segundo se produce un conjunto de datos de 500 valores con un promedio de 100 y una desviación estándar de 30.

set.seed(8690) # esto es para que los valores se queda igual a cada vez que se corre el analisis
a=rnorm(5000, 100, 10) # la función para generar datos al azar con una distribución normal

dfa=data.frame(a)
head(dfa, n=10)
##            a
## 1  122.45061
## 2   96.32812
## 3   97.62805
## 4  104.08504
## 5   87.87156
## 6   96.03265
## 7   95.25282
## 8   93.10139
## 9  120.29985
## 10 110.93526
 # r is for random
 # norm =distribución normal
#a
b=rnorm(500, 100, 50)
dfb=data.frame(b)
library(ggplot2)

ggplot(dfa, aes(a))+
  geom_density(fill="blue")+
  geom_density(dfb, mapping=aes(b,fill="red", alpha=.5 ))+
  theme(legend.position = "none") +
  geom_vline(aes(xintercept = 100, colour="red"))

ggsave("Graficos/dispersion.png")


El rango

El rango son los valores mínimo y valor máximo de un conjunto de datos. Se usa la función range(). Usamos los dos conjuntos de datos ya creado anteriormente para visualizar los rangos de la distribuciones de los gráficos. Lo que uno observa es que el valor mínimo del primer conjunto de datos es 59.17 y el máximo es 137.12. Para el segundo conjunto de datos el valor mínimo es 1.86 y el máximo es 203.88.

range(dfa$a)
## [1]  67.77126 133.87095
range(dfb$b)
## [1] -80.68499 251.11763

Ejemplo de la clase

Cual es el rango de la Edad de los padres de los Estudiantes

Edad=c(57,50,43,39,54,50,59,49, 57,51,43,47)
Edad
##  [1] 57 50 43 39 54 50 59 49 57 51 43 47
Edad_df=data.frame(Edad)
Edad_df
##    Edad
## 1    57
## 2    50
## 3    43
## 4    39
## 5    54
## 6    50
## 7    59
## 8    49
## 9    57
## 10   51
## 11   43
## 12   47
range(Edad)
## [1] 39 59
range(Edad_df$Edad)
## [1] 39 59
Dist_V=c(14, 71, 16, 43, 32, 17.1, 11, 53, 16.2, 47, 18.2, 39, 9, 16.2)

df=data.frame(Dist_V) # para poner los datos un un data frame

df
##    Dist_V
## 1    14.0
## 2    71.0
## 3    16.0
## 4    43.0
## 5    32.0
## 6    17.1
## 7    11.0
## 8    53.0
## 9    16.2
## 10   47.0
## 11   18.2
## 12   39.0
## 13    9.0
## 14   16.2

Caluclar la varianza

var(df$Dist_V)
## [1] 359.3963

Desviación estandard

sd(df$Dist_V)
## [1] 18.95775

Error estandard

error_e= sd(df$Dist_V)/sqrt(length(df$Dist_V))
error_e
## [1] 5.066672

95% de la distribución

Limite_inferior_a=mean(df$Dist_V)-(error_e*1.96)

Limite_superior_a=mean(df$Dist_V)+(error_e*1.96)


Limite_inferior_a
## [1] 18.83361
Limite_superior_a
## [1] 38.69496

La varianza

Los pasos para calcular la varianza son los siguientes

  • tener un conjunto de datos, aquí lo llamamos Data
  • convertir esta lista en un data frame
  • Calcular el promedio de los datos
  • restar el promedio de cada valor y cuadralos
  • Sumar y restas de n-1, done n es la cantidad de datos
  • el numerador se llama la suma de los cuadrados = SS

\[{ s }^{ 2 }=\frac { \sum { { ({ x }_{ i }-\bar { x } })^{ 2 } } }{ n-1 }=\frac{SS}{n-1}\]

library(tidyverse)
Data=c(1,2,3,4,5,6)
Data_df=data.frame(Data)
Data_df
##   Data
## 1    1
## 2    2
## 3    3
## 4    4
## 5    5
## 6    6
Data_df$mean_Data=mean(Data)   # Aqui se añade el promedio a cada fila
Data_df
##   Data mean_Data
## 1    1       3.5
## 2    2       3.5
## 3    3       3.5
## 4    4       3.5
## 5    5       3.5
## 6    6       3.5
Data_df$Diff=Data_df$Data-Data_df$mean_Data 
          # Calcular la diferencia entre el promedio y el valor x
sum(Data_df$Diff) # si los valores no se cuadra la suma sera zero.
## [1] 0
Data_df$SS=(Data_df$Data-Data_df$mean_Data)^2 # SS para la suma de los cuadrados 
Data_df
##   Data mean_Data Diff   SS
## 1    1       3.5 -2.5 6.25
## 2    2       3.5 -1.5 2.25
## 3    3       3.5 -0.5 0.25
## 4    4       3.5  0.5 0.25
## 5    5       3.5  1.5 2.25
## 6    6       3.5  2.5 6.25
sum(Data_df$SS)
## [1] 17.5

Este indice se llama la desviación del promedio que es la suma de los cuadrados


Calcular la varianza con var()

Ahora la manera fácil de hacer los análisis, usar la función var, y no hay que hacer ninguno de los pasos anteriores. Pero es importante que sepa como es el procedimiento de calcular la varianza. Nota que la varianza es un indice de la diferencia entre el promedio y cada valor. El otro paso es que los valores tienen que estar cuadrada las diferencias sino la suma sera de cero. Se usa el variancas cuando tenemos confianzas que los datos provienen de una distribución normal y que los datos que uno tiene no están sesgados.

var(Data)
## [1] 3.5

La desviación estandar

La varianza es un indice que no esta en la misma unidad que los valores recolectado, por ejemplo si se recolecta los datos en centímetros, la varianza es en centímetros cuadrados. Por consecuencia no es necesariamente el mejor para describir la dispersión. Entonces hay que sacar la raíz cuadra de la varianza. La desviación estándar es un indice que se usa para describir la dispersión de una población, en otra palabra cuan diferentes son los datos uno del otro. Se usa el desviación estándar cuando tenemos confianzas que los datos provienen de una distribución normal y que los datos que uno tiene no están sesgados.

\[{ s }=\sqrt { \frac { \sum { { ({ x }_{ i }-\bar { x } })^{ 2 } } }{ n-1 } }\] o más sencillo

\[s=\sqrt{s^2}\]

la función sd, “standard deviation” es sumamente facil de calcular en R.

sd(Data_df$Data)  # deviación estandard
## [1] 1.870829

El rango intertcuartil.

La función básica es quantile si lo dejamos sin más instrucción calcula los siguientes probabilidades 0%, 25%, 50% (mediana), 75%, 100%. Pero si uno quiere los valores que se encuentra en una posición especifica hay que usar type =1 como se ve en el segundo ejemplo. Hay 9 tipos de cuantiles con esta función, estos se encuentra definido en RStudio. Añade quantile en el artea de help y vera las otras alternativas.

quantile(Data) # la función básica (0%, 25%, 50% (mediana), 75%, 100%)
##   0%  25%  50%  75% 100% 
## 1.00 2.25 3.50 4.75 6.00
# Seleccionar los cuantiles específicos.
quantile(Data, probs = c(0.025, 0.25, 0.50,.75, .975))   
##  2.5%   25%   50%   75% 97.5% 
## 1.125 2.250 3.500 4.750 5.875

Para explicar estos conceptos mejor visualizamos los datos

i x[i] Mediana Cuartiles
1 03
2 19
3 27
4 33 Q1=33
5 52
6 60
7 77
8 87 Q2=87
9 99
10 101
11 122
12 137 Q3=137
13 140
14 142
15 150

Ahora usamos la función quantile con el type=1 de calcular los cuartiles y ver si tenemos los mismos resultados.

dat=c(3,19,27,33,52,60,77,87,99,101,122,137,140,142,150)

quantile(dat, type =1)
##   0%  25%  50%  75% 100% 
##    3   33   87  137  150
sd(dat)
## [1] 49.2145

El error estandard

El termino correcto es el error de las desviación estándar pero típicamente acortado a error estándar. El indice de error estándar es para describir cual es la posible dispersión del promedio. En otra palabra cuan confiado estamos con el estimado del promedio. Más grande el error estándar menos confiado estamos con el promedio. Se usa el error estándar cuando tenemos confianzas que los datos provienen de una distribución normal y que los datos que uno tiene no están sesgados.

La formula de error estándar es la siguiente usando la desviación estándar

\[s_{\overline{x}}=\frac{s}{\sqrt{n}}\]

o usando la varianza, donde la n es la cantidad de datos

\[s_{\overline{x}}=\sqrt{\frac{s^2}{n}}\]

Ahora si usamos los datos enseñado al principio del modulo. Calculamos error estándar de ambas distribución. er= error estándar. No hay función en R para calcular el error estándar, por consecuencia hay que crear la formula para calcular el indice. Vemos que cuando hay más dispersión el error estándar es más grande.

length(dfa$a)
## [1] 5000
es_a= sd(dfa$a)/sqrt(length(dfa$a))

es_b= sd(dfb$b)/sqrt(length(dfb$b))

es_a
## [1] 0.1405601
es_b
## [1] 2.204251

El intervalo de confianza de 95% del promedio

Ya que hemos calculado el error estándar podemos calcular la dispersión de los promedios. Esto quiere decir que si uno repite la recolección de datos el promedio tiene un 95% de probabilidad estar en este rango. Uno calcula los limites de la dispersión de los promedios usando la siguientes formulas.

\[Limite\ 95\%\ ariba=\ \overline{x}\ +\left(ES\ \cdot\ 1.96\right)\]

\[Limite\ 95\%\ abajo=\ \overline{x}\ -\left(ES\ \cdot\ 1.96\right)\]

Limite_inferior_a=mean(dfa$a)-(es_a*1.96)

Limite_superior_a=mean(dfa$a)+(es_a*1.96)

Limite_inferior_a # limite inferior 95%
## [1] 99.73334
mean(dfa$a)   # El promedio
## [1] 100.0088
Limite_superior_a # el limite superior 95%
## [1] 100.2843
Limite_inferior_b=mean(dfb$b)-(es_b*1.96)
Limite_superior_b=mean(dfb$b)+(es_b*1.96)

mean_b=mean(dfb$b)
Limite_inferior_b
## [1] 94.81576
mean(dfb$b)
## [1] 99.13609
Limite_superior_b
## [1] 103.4564

Visualizando el intervalos de confianza del promedio. Lo que uno observa es que primero el promedio puede ser en localidad diferentes porque el conjunto de datos fue menos en el segundo gráfico. Además vemos que el intervalo de 95% de confianza del promedio en el segundo es más amplio.

CI_a1=ggplot(dfa, aes(a))+
  geom_histogram(fill="blue", colour="white",alpha=.5, binwidth = 2)+
  theme(legend.position = "none") +
  geom_vline(aes(xintercept = 100), colour="red")+
  geom_vline(aes(xintercept = Limite_inferior_a), colour="black")+
  geom_vline(aes(xintercept = Limite_superior_a), colour="black")
ggsave("Graficos/CI_a1.png")

CI_b=ggplot(dfb, aes(b))+
  geom_histogram(fill="blue", colour="white", alpha=.5, binwidth = 5)+
  theme(legend.position = "none") +
  geom_vline(aes(xintercept =mean_b), colour="red")+
  geom_vline(aes(xintercept = Limite_inferior_b), colour="black")+
  geom_vline(aes(xintercept = Limite_superior_b), colour="black")


ggsave("Graficos/CI_b.png")

#library(easyGgplot2)
#ggplot2.multiplot(CI_b.png,CI_b.png, cols=2)

El intervalos de confianza de los datos

Para tener una idea de la distribución de los datos y cual es el porcentaje de valores que esté incluido (asumiendo una distribución normal). Podemos crear un gráfico que demuestra el porcentaje incluidos basado en la desviación estándar. Nota aquí no es la dispersión del promedio pero la dispersión de los datos en la población.


Rangos incluidos en intervalos de confianza

Cálculos el promedio y la desviación estándar de los datos. Lo haremos por genero. Si uno calcula el rango de promedio ± 1 sd, esto incluye 68.2% de los datos, si incluimos el promedio ± 2 sd incluye 95.6% de los datos,

Rangos incluidos en intervalos de confianza
sd rango inluido
0 el promedio
±1 68.2%
±2 95.6%
±3 99.7%
±4 99.99%

Ejemplo del intervalo de confianza

El intervalo de confianza de colesterol en los Iranis

Comenzamos con evaluar el intervalo de confianza de los datos con datos teóricos. Por ejemplo el nivel de colesterol en el plasma varia en los humanos. En el siguiente articulo Plasma total cholesterol level and some related factors in northern Iranian people. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3783780/

Usamos los datos para las mujeres con un promedio de 196.7 y una desviación estándar de 39.11. Con estos datos asumimos que esto provienen de una distribución normal y que representa las mujeres en resto del mundo.

# Creamos un conjunto de datos para los análisis

Col=rnorm(200000, 196.7, 39.11)
Col=data.frame(Col)

promCol=Col%>%
  summarise(Mean=mean(Col))
  
sdCol=Col%>%
  summarise(sd=sd(Col))

Visualizar los datos: Uds conoce su nivel de colesterol total? Donde se encuentra en esta distribución? Se encuentra en el 68%? Nota que la suma de todos los porcentaje es igual a 100%.

library(grid)
library(gtable)

lims <- c(28, 350)

breaks.major2<-c(0, 79, 118, 157, 
                 197, 235, 274, 314)
breaks.minor2= c(79, 118, 157,197, 
                235, 274, 314,379)
breaks.comb <- sort(c(breaks.major2, breaks.minor2-1.0E-6))
labels.comb<- c(0, 79, "\n-3sd", 118, "\n-2sd", 157, "\n-1sd", 197, "\npromedio",
                 235,  "\n+1sd",274, "\n+2sd", 314,"\n+3sd", 379)
Colesterol_Inter=Col%>%
ggplot(aes(Col))+
  geom_histogram(fill="blue", colour="white",alpha=.5, binwidth = 5)+
  theme(legend.position = "none")+
  geom_vline(xintercept=as.numeric(promCol), colour="black")+
  geom_vline(aes(xintercept = as.numeric(promCol-sdCol)), colour="blue")+
  geom_vline(aes(xintercept = as.numeric(promCol+sdCol)), colour="blue")+
geom_vline(aes(xintercept = as.numeric(promCol-2*sdCol)), colour="red")+
  geom_vline(aes(xintercept = as.numeric(promCol+2*sdCol)), colour="red")+
geom_vline(aes(xintercept = as.numeric(promCol-3*sdCol)), colour="orange")+
  geom_vline(aes(xintercept = as.numeric(promCol+3*sdCol)), colour="orange")+
  scale_x_continuous(expand=c(0,0), limit=lims, 
                                minor_breaks=breaks.minor2, 
                                breaks=breaks.comb,
                                labels=labels.comb)+
  xlab("Nivel de colesterol")+
  annotate("text", x=180, y = .004, label="34.1%")+
  annotate("text", x=210, y = .004, label="34.1%")+
  annotate("text", x=140, y = .002, label="13.6%")+
  annotate("text", x=250, y = .002, label="13.6%")+
  annotate("text", x=90, y = .001, label="2.1%")+
  annotate("text", x=295, y = .001, label="2.1%")+
  annotate("text", x=70, y = .0005, label="0.1%")+
  annotate("text", x=330, y = .0005, label="0.1%")
Colesterol_Inter

ggsave("Graficos/Colesterol_Inter.png")

Otro ejemplo de los intevalos de confianzas

La altura de los humanos

Para evaluar el 95% de intervalo de confianza usaremos datos de la alturas de 500 adultos. Estos datos fueron bajado del siguiente website. Están disponible en debajo la pestaña de “Los Datos”. https://www.kaggle.com/yersever/500-person-gender-height-weight-bodymassindex/data


library(readr)
library(gt)
Alturas_Humanos <- read_csv("Data_files_csv/Alturas_Humanos.csv")
gt(head(Alturas_Humanos))
Genero Altura_cm Peso_kg
Hombres 174 96
Hombres 189 87
Mujer 185 110
Mujer 195 104
Hombres 149 61
Hombres 189 104

Calculamos los promedios y las desviación estándar para añadirlos al gráfico

library(tidyverse)
head(Alturas_Humanos)
## # A tibble: 6 × 3
##   Genero  Altura_cm Peso_kg
##   <chr>       <dbl>   <dbl>
## 1 Hombres       174      96
## 2 Hombres       189      87
## 3 Mujer         185     110
## 4 Mujer         195     104
## 5 Hombres       149      61
## 6 Hombres       189     104
length(Alturas_Humanos$Genero)
## [1] 500
# Parametros para las Mujeres
promM=Alturas_Humanos%>%
  dplyr::select(Genero, Altura_cm)%>%
  filter(Genero=="Mujer")%>%
  summarise(MeanM=mean(Altura_cm))
promM 
## # A tibble: 1 × 1
##   MeanM
##   <dbl>
## 1  170.
sdM=Alturas_Humanos%>%
  dplyr::select(Genero, Altura_cm)%>%
  filter(Genero=="Mujer")%>%
  summarise(sd=sd(Altura_cm))
 sdM 
## # A tibble: 1 × 1
##      sd
##   <dbl>
## 1  15.7
# Parametros para las Hombres
promH=Alturas_Humanos%>%
  dplyr::select(Genero, Altura_cm)%>%
  filter(Genero=="Hombres")%>%
  summarise(Mean=mean(Altura_cm))


sdH=Alturas_Humanos%>%
  dplyr::select(Genero, Altura_cm)%>%
  filter(Genero=="Hombres")%>%
  summarise(sd=sd(Altura_cm))

Aquí el gráfico de la distribución de los datos con un histograma, y promedio (negro), el rango de 68% entre las barras azules y el de 95% entre las barras roja.

Alturas_Mujer=Alturas_Humanos%>%
  dplyr::select(Genero, Altura_cm)%>%
  filter(Genero=="Mujer")%>%
ggplot(aes(Altura_cm))+
  geom_histogram(fill="blue", colour="yellow",alpha=.5)+
  theme(legend.position = "none")+
  geom_vline(xintercept=as.numeric(promM), colour="black")+
  geom_vline(aes(xintercept = as.numeric(promM-sdM)), colour="blue", size=1)+
  geom_vline(aes(xintercept = as.numeric(promM+sdM)), colour="blue")+
geom_vline(aes(xintercept = as.numeric(promM-2*sdM)), colour="red")+
  geom_vline(aes(xintercept = as.numeric(promM+2*sdM)), colour="red")


ggsave("Graficos/Alturas_Mujer.jpeg") # .png, .tiff, etc


Ejercicio: Ahora prepara el mismo gráfico para los hombres.

The tallest building in the world, el numero de pisos

88, 88, 110, 88, 80, 69, 102, 78, 70, 55, 79, 85, 80, 100, 60, 90, 77, 55, 75, 55, 54, 60, 75, 64, 105, 56, 71, 70, 65, 72

Estadística Descriptiva

Fecha de la ultima revisión

## [1] "2023-07-31"

Activar los Paquetes

library(ggplot2)  # paquete para visualizar los datos
library(ggversa) # paquete para diferentes conjuntos de datos
library(modeest) # paquete para calcular la moda 

library(pastecs) # paquete para análisis tiempo-espacial usado en ecología 
library(psych) # paquete para análisis psicométrica, psicológica y de personalidad 
library(knitr) # un grupo de función para incluyendo tablas bonitas con kable.
library(tidyverse)
library(gridExtra)
library(e1071)

Estadistica descriptiva

En los módulos de “Medidas de Tendencias Central” y “Medidas de Dispersión” se explicó donde proviene estos parámetros y como calcular estos. En este módulo aprenderemos diferentes funciones como calcular estos parámetros individualmente y herramienta como calcular todos y otros parámetros todo juntos.

Los indices que veremos aquí incluye

  • el promedio
  • la mediana
  • la desviación estándar
  • el mínimo
  • el máximo
  • los cuantiles
  • el indice Oblicuidad (en ingles “Skewness”)
  • el indice de Curtosis ( en ingles “Kurtosis”)

Aqui creamos un conjunto de datos de 100 datos con un promedio de 100 y una desviación estándar de 10. Nota que la función set.seed() es que el comienzo la simulación sea igual a cada vez que se corre, y se el mismo resultado. Esto se añade solamente cuando uno esta enseñando y que los resultados sean consistente.

x=rnorm(100, 100, 10) #(100 datos, x=100, sd=10)
x=data.frame(x)
head(x)
##           x
## 1 110.44564
## 2  96.11388
## 3 101.97822
## 4 111.76182
## 5 118.75482
## 6 104.62023
mean(x$x) # el promedio
## [1] 100.0398
sd(x$x) # la desviación estándar
## [1] 9.932391
min(x$x) # el valor mínimo
## [1] 77.74019
max(x$x) # el valor máximo
## [1] 123.6114

  1. Quiz 1: Usa R y construye una lista o data frame con los siguientes datos y calcular el promedio. Contesta en MSTeam Form con tu respuesta. 4, 6, 7, 3, 9, 10, 19, 52.

Analisis con muchos datos

Usaremos datos que hemos visto en el modulo Producción de Gráficos.

Se necesita el archivo DownloadFestival que se encuentra debajo la pestaña de Los Datos. El ejemplo proviene de Field et al. (2014).

Una bióloga estaba preocupado por los posibles efectos sobre la salud de los que particpan a un festivales de música. Entonces, un año fue al Download Festival en el Reino Unido (Download Festival UK). Ella midió la higiene del los que participaron al concierto n= 810 durante el festival de 3 días. Cada día intentaba encontrar a todas las personas que censó el primer día. Los valores asignado fueron de 0 a 4 sobre el nivel de limpieza por como olia los participantes

  • 0 = hueles como un cadáver.
  • 4 = hueles a rosas dulces en un fresco día de primavera
library(readr)
DownloadFestival <- read_csv("Data_files_csv/DownloadFestival.csv")



dlf=DownloadFestival  #usamos un nombre más corta para facilitar  
head(dlf) # ver las 3 primeras filas
## # A tibble: 6 × 5
##   ticknumb gender  day1  day2  day3
##      <dbl> <chr>  <dbl> <dbl> <dbl>
## 1     2111 Male    2.64  1.35  1.61
## 2     2229 Female  0.97  1.41  0.29
## 3     2338 Male    0.84 NA    NA   
## 4     2384 Female  3.03 NA    NA   
## 5     2401 Female  0.88  0.08 NA   
## 6     2405 Male    0.85 NA    NA

Remover los NA del análisis

Con los datos de los participantes al festival como en algunos diá hay participantes donde no tienen los datos se añadió un NA, es estos casos para que el análisis se logra hay que añadir a la función na.rm=TRUE que significa remover la NA. Para dar se cuenta remueve na.rm=TRUE cuando se usa el “día2” o “día3”, y evalúa que pasa.

mean(dlf$day2, na.rm=TRUE) # na.rm= na remove
## [1] 0.9609091
sd(dlf$day1, na.rm=TRUE)
## [1] 0.9444949
min(dlf$day1, na.rm=TRUE)
## [1] 0.02
max(dlf$day1, na.rm=TRUE)
## [1] 20.02
median(dlf$day1, na.rm=TRUE)
## [1] 1.79


Resumen estadístico de una variable

Para ver los estadístico mencionado arriba (menos la moda, oblicuidad y curtosis) se puede usar la función stat.desc() del paquete pastecs. Para facilitar la lectura de los valores se usa la función “round(x, 3), el tres en esta caso representa la cantidad de valores significativos que se demuestra. Si no usamos round() los valores aparece en notación científicas.

Nota que hay muchos más parámetros calculados. Aparece en la lista en orden el valor mínimo: min(), el valor máximo: max(), la mediana: median, el promedio: mean, la desviación estándar; std.dev entre otros.

library(pastecs)
stat.desc(dlf[,c("day1")])
##                      day1
## nbr.val      8.100000e+02
## nbr.null     0.000000e+00
## nbr.na       0.000000e+00
## min          2.000000e-02
## max          2.002000e+01
## range        2.000000e+01
## sum          1.452620e+03
## median       1.790000e+00
## mean         1.793358e+00
## SE.mean      3.318617e-02
## CI.mean.0.95 6.514115e-02
## var          8.920705e-01
## std.dev      9.444949e-01
## coef.var     5.266627e-01
round(stat.desc(dlf[,c("day1")]), 2)  
##                 day1
## nbr.val       810.00
## nbr.null        0.00
## nbr.na          0.00
## min             0.02
## max            20.02
## range          20.00
## sum          1452.62
## median          1.79
## mean            1.79
## SE.mean         0.03
## CI.mean.0.95    0.07
## var             0.89
## std.dev         0.94
## coef.var        0.53

Resumen Estadístico de multiples variables

Si uno quiere evaluar múltiples variables continua todas juntos se puede usar la misma función pero el componente c() se añade todas las variables de interés.

round(stat.desc(dlf[,c("day1","day2","day3")], basic=FALSE,norm=TRUE), digits=3) # round reduce a 3 valores significativo
##                 day1  day2  day3
## median         1.790 0.790 0.760
## mean           1.793 0.961 0.977
## SE.mean        0.033 0.044 0.064
## CI.mean.0.95   0.065 0.087 0.127
## var            0.892 0.520 0.504
## std.dev        0.944 0.721 0.710
## coef.var       0.527 0.750 0.727
## skewness       8.833 1.083 1.008
## skew.2SE      51.407 3.612 2.309
## kurtosis     168.967 0.755 0.595
## kurt.2SE     492.314 1.265 0.686
## normtest.W     0.654 0.908 0.908
## normtest.p     0.000 0.000 0.000

  1. Quiz 3: Usa R usa el data.frame Camas_Hospital en el paquete ggversa. Contesta en MSTeam Form con tu respuesta. Selecciona la variable Camas que representa el “número de camas por 1000 personas en muchos países. ¿Cual es el rango (range)?

Los Cuantiles

Los cuantiles son los valores a intervalos específicos de una variable aleatoria continua. Los cuantiles son frecuentemente una mejor interpretación de la distribución cuando los valores no tienen una distribución normal. Típicamente, la distribución se divide en 4 partes con las siguientes partes (los cuantiles 0.25, 0.50 = la mediana, 0.75) y se define como cuartiles. Para meas detalle pueden ver el siguiente enlace https://en.wikipedia.org/wiki/Quantile.

En el siguiente ejemplo se demuestra como tulizar la función quantiles y seleccionar los cuantiles deseados con el comopnente de probs=c(x,x,x).

quantile(dlf$day1,probs=c(0.05, 0.1, 0.25, 0.5, 0.75, 0.95, 0.99), na.rm=TRUE)
##     5%    10%    25%    50%    75%    95%    99% 
## 0.5945 0.8490 1.3125 1.7900 2.2300 2.9100 3.3200

Se puede usar también la función describe en el paquete pshych que le da automáticamente estos cuantiles.

describe(dlf$day1)
##    vars   n mean   sd median trimmed mad  min   max range skew kurtosis   se
## X1    1 810 1.79 0.94   1.79    1.77 0.7 0.02 20.02    20 8.83   168.97 0.03

El indice de Oblicuidad: Skewness

El indice de oblicuidad es un indice que describe la simetría en una distribución alrededor de su promedio. Otra manera de describirlo es el tercer momento, por que los datos se poner a un exponente elevado al ^3.

La formula es la siguiente. Lo que se darán cuenta es muy similar a la varianza pero note que las diferencias se poner al ^3. Para meas información vea este enlace https://en.wikipedia.org/wiki/Skewness.

\[\frac{1}{N}\sum_{i=}^N\left(\frac{x_i-\overline{x}}{\sigma}\right)^3\]

Primero voy a crear tres conjuntos de datos

  • con distribución normal
  • oblicuidad a la izquierda
  • oblicuidad a la derecha
normal=rnorm(100000, .5, .15)
obliz=rbeta(100000, 1.5,5)
obldr=rbeta(100000, 5.5,2)

normal=as.tibble(normal)

obliz=as.tibble(obliz)

obldr=as.tibble(obldr)

Ahora unimos los data frames y se añade nombres a las columnas

df=cbind(normal, obliz, obldr)
head(df, n=2)
##       value     value     value
## 1 0.3593956 0.1288732 0.5454791
## 2 0.6649285 0.1578481 0.8598856
df <- setNames(df, c("normal","obliz","obldr"))

head(df, n=2)
##      normal     obliz     obldr
## 1 0.3593956 0.1288732 0.5454791
## 2 0.6649285 0.1578481 0.8598856

El próximo paso es apilar cada columna una sobre la otra. La razón que queremos esto es que deseamos reproducir las variables en un mismo gráfico

library(tidyverse)
df2=df%>%
  gather(key = "Distribución", value="valor", c(normal, obliz, obldr))
head(df2, n=3)
##   Distribución     valor
## 1       normal 0.3593956
## 2       normal 0.6649285
## 3       normal 0.5922829
# unique(df2$Distribución) # función para ver el nombre de las variables en la columna Distribución

Ahora vamos a ver los datos un gráfico. Vemos que la distribución de los datos son muy diferentes, tanto la distribución en azul y verde están sesgado a unos valores y tienen una cola o valores más grande (azul) o pequeños (verde) que si fuese una distribución normal.

ggplot(df2, (aes(valor, colour=Distribución)))+
  geom_density()+
  xlim(-.01,1)

ggsave("Graficos/Skewness.png")

Ahora se calcula el indice de oblicuidad y comparamos los valores. Como regla cuando el nivel de oblicuidad esta entre

  • -0.5 y 0.5 se considera dentro de una distribución simétrica (normal).
  • -1.0 y -0.5 o entre 0.5 y 1.o los valores tienen una oblicuidad moderada.
  • Menor de -1.0 o mayor de 1.0 los datos tienen una oblicuidad grande.

Ahora evaluamos la oblicuidad de los tres gráficos. se usa la función de skewness en el paquete e1071

Para los datos de una distribución normal el valor es muy cerca a cero. Para los datos sesgado a la izquierda el indice de oblicuidad es positivo y el sesgado a derecha es negativo.

library(e1071)
e1071::skewness(normal$value) # la oblicuidad de los datos de una distribución normal
## [1] 0.006368452
e1071::skewness(obliz$value) # la oblicuidad de los datos sesgado a la izquierda
## [1] 0.8262887
e1071::skewness(obldr$value) # la oblicuidad de los datos sesgado a la derecha
## [1] -0.6486796

El indice de Curtosis: Kurtosis

El indice de curtosis es un índice que describe la cola de la una distribución alrededor de su promedio. Otra manera de describirlo es el cuarto momento, por que los datos se poner a un exponente elevado al ^4. El curtosis mide la propensidad de tener daos atípicos.

La formula es la siguiente. Lo que se darán cuenta es muy similar a la varianza pero note que las diferencias se poner al ^4. Para más información vea este enlace https://www.wikiwand.com/en/Kurtosis.

\[\frac{1}{N}\sum_{i=}^N\left(\frac{x_i-\overline{x}}{\sigma}\right)^4\]

Primero voy a crear cuatro conjuntos de datos

  • con distribución normal
  • con distribución normal, con cola reducida
  • con distribución normal, con cola extendida
  • distribución uniforme
library(PearsonDS)
library(rmutil)

momentsR=c(mean=0, variance=1, skewness=0, kurtosis=2)
momentsE=c(mean=0, variance=1, skewness=0, kurtosis=4)  

normalR=rpearson(100000, moments=momentsR)
normalE=rpearson(100000, moments=momentsE)


Unif=runif(100000, -2,2)
normal=rnorm(100000, 0,1)
laplace=rlaplace(500000, m=0, s=1)


normal=as.tibble(normal)

normalR=as.tibble(normalR)

normalE=as.tibble(normalE)

Unif=as.tibble(Unif)

laplace=as.tibble(laplace)

Ahora unimos los data frames y se añade nombres a las columnas

df=cbind(normal, normalR, normalE, Unif, laplace)
head(df, n=2)
##        value     value      value     value     value
## 1  0.5988411  1.708884 -2.8346486  1.062104 -0.177971
## 2 -0.5381463 -1.145072  0.2195933 -1.907250 -2.433041
df <- setNames(df, c("normal","normalR","normalE", "Unif", "laplace"))

head(df, n=2)
##       normal   normalR    normalE      Unif   laplace
## 1  0.5988411  1.708884 -2.8346486  1.062104 -0.177971
## 2 -0.5381463 -1.145072  0.2195933 -1.907250 -2.433041

El próximo paso es apilar cada columna una sobre la otra. La razón que queremos esto es que deseamos reproducir las variables en un mismo gráfico

library(tidyverse)
df2=df%>%
  gather(key = "Distribución", value="valor", c(normal, normalR, normalE, Unif, laplace))
head(df2, n=3)
##   Distribución      valor
## 1       normal  0.5988411
## 2       normal -0.5381463
## 3       normal  0.9216448
# unique(df2$Distribución) #función  para ver el nombre de las variables en la columna Distribución

Ahora vamos a ver los datos en un gráfico. Vemos que la distribución de los datos son muy diferentes, Tiene que concentrar no en el pico de la distribución pero las colas de los datos. Nota la distribución normal que es de color amarillo, y comparar si la colas están por debajo o por encima de esta distribución normal.

Tanto la distribución uniforme (color rosa) y normal reducido (normalR, color azul) las curvas pasan de bajo la curva normal. Al contrarío la linea verde y roja son distribuciones que pasan por encima de la curva normal, entonces las colas son más predominante.

whole=ggplot(df2, (aes(valor, colour=Distribución)))+
  geom_density(adjust=5)+
  xlim(-5,5)

ggsave("Graficos/curtosis_whole.png")


sub=ggplot(df2, (aes(valor, colour=Distribución)))+
  geom_density()+
   theme_bw() +
  scale_x_continuous(limits=c(-5, 1)) + 
  scale_y_continuous(limits=c(0, .1)) +
  theme(legend.position= "none")

ggsave("Graficos/curtosis.png")

sub + annotation_custom(
    ggplotGrob(whole),
    xmin = -1.8, xmax = 1.4, ymin = 0.005, ymax = 0.075)

Ahora se calcula el indice de curtosis y comparamos los valores. Como regla el nivel de curtosis esta significativo si los valores de curtosis se enuentra en los siguientes rangos, y se acerca cero no hay curtosis (lo que uno espera para una distribución normal.

  • Menor de -1.0 los datos están muy aplanados (Uniforme, normalR).
  • Mayor de 1.0 (la distribución de Laplace).

Ahora evaluamos la oblicuidad de los tres gráficos. se usa la función de kurtosis en el paquete e1071

Para los datos de una distribución normal el valor es muy cerca a cero. Para los datos que tienen exceso de cola el valor de curtosis es negativos y cuando el valor de curtosis es positivo hay exceso de datos en la cola.

library(e1071)
e1071::kurtosis(normal$value) # curtosis de los datos de una distribución normal
## [1] -0.009931754
e1071::kurtosis(normalR$value) # curtosis de los datos restringido
## [1] -1.008095
e1071::kurtosis(normalE$value) # curtosis de los datos con más colas
## [1] 1.142044
e1071::kurtosis(Unif$value) # curtosis de distribución informe, falta de colas
## [1] -1.203061
e1071::kurtosis(laplace$value) # curtosis de distribución Laplace, exceso de colas
## [1] 3.058468

Quiz 1

Quiz 2

Quiz 3

dfNormal=data.frame(data=rnorm(1000000))
head(dfNormal)
##         data
## 1  0.6659112
## 2  1.5452524
## 3  1.0483245
## 4  0.6581135
## 5  1.2423059
## 6 -1.4123176
ggplot(dfNormal, aes(data))+
  geom_histogram(colour="white", fill="orange")+
  xlim(-4, 4)

ggsave("Normal.png")

Gráficos

library(ggplot2)

Gráficos Básicos con ggplot2

Este modulo es una introducción corta para la visualización de los datos. El paquete principal que se usa es el ggplot2. La visualización de datos es un área especializado y no se podrá hacer justicia al tema al mismo tiempo que se estudia la estadística. Aquí se presenta es una introducción breve del tema. La visualización ayuda a entender los datos ya que la dispersión de ellos impacta que prueba se puede utilizar y el significado de los analisis.

La información utilizada en este documento proviene en parte del libro Discovering Statistics using R por Andy Field, Jeremy Miles y Zoë Field (2014).

Como crear una gráfica de regresión lineal usando ggplot

  1. Subir los datos “Exam Anxiety” Los archivos de datos que se usan en el libro se encuentran en este enlace, https://studysites.sagepub.com/dsur/study/articles.htm

Seleccionar el archivo Exam Anxiety. Note que los datos a la hoja de datos tienen que abrirlo en Excel o otro programa y salvarlo en formato .csv antes de seguir los proximos pasos. El siguiente paso es poner el archivo de datos en su proyecto de RStudio.
*** ## Subir los datos a RStudio

library(readr)
Exam_Anxiety <- read_csv("Data_files_csv/Exam Anxiety.csv")

Para visualizar las primeras y ultimas 6 filas usar head() y tail() respectivamente.

head(Exam_Anxiety)
## # A tibble: 6 × 5
##    Code Revise  Exam Anxiety Gender
##   <dbl>  <dbl> <dbl>   <dbl> <chr> 
## 1     1      4    40    86.3 Male  
## 2     2     11    65    88.7 Female
## 3     3     27    80    70.2 Male  
## 4     4     53    80    61.3 Male  
## 5     5      4    40    89.5 Male  
## 6     6     22    70    60.5 Female
tail(Exam_Anxiety)
## # A tibble: 6 × 5
##    Code Revise  Exam Anxiety Gender
##   <dbl>  <dbl> <dbl>   <dbl> <chr> 
## 1    98     23    70    75.8 Male  
## 2    99     13    55    71.0 Female
## 3   100     14    75    78.2 Female
## 4   101      1     2    82.3 Male  
## 5   102      9    40    79.0 Male  
## 6   103     20    50    91.1 Female

Parta ver el nombre de las variables en el archivo se usa la función names. Vemos que hay cinco columnas, el Code que se refiere a un código que identifica el estudiante, Revise el tiempo que el estudiante estudio antes de tomar el examen, Exam la nota del estidiante, Anxiety, un indice de anxiedad antes de tomar el examen, Gender el genero del estudiante.

names(Exam_Anxiety)
## [1] "Code"    "Revise"  "Exam"    "Anxiety" "Gender"

Regresión lineal

El primer gráfico es crear una regresión lineal. Para producir una regresión lineal se necesita dos variables con datos continuos Seleccionamos dos variables continua, el nivel de ansiedad y la nota del examen. Para hacer una regresión lineal que sigue el patrón de y=mx+b, hay que utilizar la función geom_smooth(method=lm), la función lm se refiere a modelo lineal o ingles linear model. Nota que con el programa ggplot2, hay que primero identificar de donde proviene los datos Exam_Anxiety, despúes que hay identificar cual; son las variables de este archivo que se van a utilizar, en este caso y=Exam, x=Anxiety. El proximoo paso es determinar que tipo de gráfico, y este caso es una regresión lineal.

ggplot(Exam_Anxiety, aes(y=Exam, x=Anxiety))+ 
  geom_smooth(method=lm, colour="red")+
  geom_point()# linear model


Añadiendo color por grupo y otras bellezas

En este archivo utilizaremos un archivo que se usa muy comúnmente en los análisis de R, para demostrar un análisis o como hacer gráfico. El archivo se llama iris y contiene información sobre el tamaño de características florales de tres especies del genero Iris. En este gráfico se añade cuatro componente suplementarios, 1) un puntos para cada par de valores Sepal.Length, Petal.Length, 2) se cambia los nombres de las leyendas en y y x con la función labs() = labels, 3) se añade un titulo al gráfico con ggtitle(), 4) Note que cada especies tiene un color distinto, esto fue muy fácil incluir añadiendo la función col=Species, lo que esto significa es que para cada especies de planta se pone un color diferente.

tail(iris)
##     Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
## 145          6.7         3.3          5.7         2.5 virginica
## 146          6.7         3.0          5.2         2.3 virginica
## 147          6.3         2.5          5.0         1.9 virginica
## 148          6.5         3.0          5.2         2.0 virginica
## 149          6.2         3.4          5.4         2.3 virginica
## 150          5.9         3.0          5.1         1.8 virginica
ggplot(iris, aes(Sepal.Length, Petal.Length,colour=Species)) +
      geom_point(aes(col = Species)) +
  geom_smooth(method="lm") +  
  labs(x = "El largo del Sepalo", y = "El largo del Petalo")+
  ggtitle("Basic geom_point and linear regression")+
  rlt_theme


Salvar gráficos con ggsave

Como salvar un gráfico para usarlo en otros programados o presentación por ejemplo de MS Power Point. Se usa la función ggsave(). se pone en comilla el nombre que se quiere dar a la figura y se identifica que tipo de archivo se quiere crear, por ejemplo (.tiff, .png, .pdf). Nota que se salvo en un archivo que se llama “Graficos”, es no es necesario, si no lo incluye sera salvado en el proyecto.

ggsave("Iris_size.png") # .tiff, .png, .jpeg, .jpg

Regresión simple con puntos

scatter <- ggplot(Exam_Anxiety, aes(Anxiety, Exam))
scatter + geom_point(shape=20, colour="red") + 
          geom_smooth(method = "lm", colour = "blue", se = F) +  # se = F, remueve el intervalo de confianza
  labs(x = "Exam Anxiety", y = "Exam Performance %")

Regresión simple con puntos y intervalo de confianza

scatter <- ggplot(Exam_Anxiety, aes(Anxiety, Exam))
scatter + geom_point() + 
          geom_smooth(method = "lm", colour = "Red")+ 
  labs(x = "Exam Anxiety", y = "Exam Performance %") 

Cambio de color del intervalo de confianza

scatter <- ggplot(Exam_Anxiety, aes(Anxiety, Exam))
scatter + geom_point() + 
  geom_smooth(method = "lm", colour = "Red", alpha = 0.2, fill = "orange") + 
  labs(x = "Exam Anxiety", y = "Exam Performance %") 


Regresión lineal por grupo.

Para separar y tener una linea por grupo se usa la función colour y se añade la variable de factor. En este caso la variable Gender para separar entre hombres y mujer. Se enseña también la función ggtitle() para añadir un titulo al gráfico.

ggplot(Exam_Anxiety, aes(y=Exam, x=Anxiety, colour=Gender))+ 
  geom_point(colour="coral")+
  geom_smooth(method="lm") +  # lm (linear model) es para modelos lineales 
  labs(x = "Exam Anxiety Score", y = "Exam Performance %")+
  ggtitle("Basic geom_point and linear regression")


Histogramas

Un histograma es un gráfico que representa la frecuencia de los valores de un conjunto de datos. pro consecuencia es el eje de x se encuentra una variable continua y en el eje de y la frecuencia. La frecuencia es lo mismo que el cantidad de veces que aparece los valores en x en el conjunto de datos.

Se necesita el archivo DownloadFestival que se encuentra debajo la pestaña de Los Datos. El ejemplo proviene de Field et al. (2014).

Una bióloga estaba preocupado por los posibles efectos sobre la salud de los que particpan a un festivales de música. Entonces, un año fue al Download Festival en el Reino Unido (Download Festival UK). Ella midió la higiene del los que participaron al concierto n= 810 durante el festival de 3 días. Cada día intentaba encontrar a todas las personas que censó el primer día. Los valores asignado fueron de 0 a 4 sobre el nivel de limpieza por como olia los participantes
+ 0 = hueles como un cadáver. 
+ 4 = hueles a rosas dulces en un fresco día de primavera

La hipótesis es que la higiene personal de los asistentes al concierto disminuiría dramáticamente durante los 3 días del festival.

library(readr)
DownloadFestival <- read_csv("Data_files_csv/DownloadFestival.csv")

FD=DownloadFestival

Construyendo histogramas y detectando valores atípicos. Nota los valores NA, estos son los participantes que no se pudieron encontrar en los siguientes días.

head(FD, n=2)
## # A tibble: 2 × 5
##   ticknumb gender  day1  day2  day3
##      <dbl> <chr>  <dbl> <dbl> <dbl>
## 1     2111 Male    2.64  1.35  1.61
## 2     2229 Female  0.97  1.41  0.29
tail(FD)
## # A tibble: 6 × 5
##   ticknumb gender  day1  day2  day3
##      <dbl> <chr>  <dbl> <dbl> <dbl>
## 1     4749 Female  0.52 NA       NA
## 2     4756 Female  2.91  0.94    NA
## 3     4758 Female  2.61  1.44    NA
## 4     4759 Female  1.47 NA       NA
## 5     4760 Male    1.28 NA       NA
## 6     4765 Female  1.26 NA       NA

Nota que aquí vemos el resultado, y encontramos un problema. Hay participantes que tienen valores que no son entre 0 y 4, que es la escala de higiene. Aunque es difícil ver, pero debido que el gráfico se extiende mayor de 4, es un indice de un problema ya que sabemos que los valores pueden estar solamente entre 0 y 4.

 ggplot(FD, aes(day1))+ 
  geom_histogram(colour="white", fill="steelblue") + 
  labs(x = "Hygiene (Day 1 of Festival)", y = "Frequency")

Evaluar los datos resumidos, para detectar porque el gráfico se extiende a valores mayor de 4. Nota que el día 1, el valor máximo es de 20. Este probablemente fue un error de poner los datos un la hoja de Excel. Lo que se puede hacer es remover este participante del analisis.

summary(DownloadFestival)
##     ticknumb       gender               day1             day2       
##  Min.   :2111   Length:810         Min.   : 0.020   Min.   :0.0000  
##  1st Qu.:3096   Class :character   1st Qu.: 1.312   1st Qu.:0.4100  
##  Median :3620   Mode  :character   Median : 1.790   Median :0.7900  
##  Mean   :3616                      Mean   : 1.793   Mean   :0.9609  
##  3rd Qu.:4155                      3rd Qu.: 2.230   3rd Qu.:1.3500  
##  Max.   :4765                      Max.   :20.020   Max.   :3.4400  
##                                                     NA's   :546     
##       day3       
##  Min.   :0.0200  
##  1st Qu.:0.4400  
##  Median :0.7600  
##  Mean   :0.9765  
##  3rd Qu.:1.5250  
##  Max.   :3.4100  
##  NA's   :687

Se puede remueve valores de un conjunto de datos usando la función subset( ) y en este caso de la columna day1 se selecciona solamente los valores menor de 5, de esta forma eliminamos el valore de 20.

Usamos otra vez summary( ) para asegurarnos que se solucionó el problema. Ahora vemos que el valor máximo es 3.69.

Festivalday1=subset(DownloadFestival, day1<5)
summary(Festivalday1)
##     ticknumb       gender               day1            day2       
##  Min.   :2111   Length:809         Min.   :0.020   Min.   :0.0000  
##  1st Qu.:3096   Class :character   1st Qu.:1.310   1st Qu.:0.4100  
##  Median :3620   Mode  :character   Median :1.790   Median :0.7900  
##  Mean   :3616                      Mean   :1.771   Mean   :0.9553  
##  3rd Qu.:4154                      3rd Qu.:2.230   3rd Qu.:1.3350  
##  Max.   :4765                      Max.   :3.690   Max.   :3.4400  
##                                                    NA's   :546     
##       day3       
##  Min.   :0.0200  
##  1st Qu.:0.4400  
##  Median :0.7600  
##  Mean   :0.9765  
##  3rd Qu.:1.5250  
##  Max.   :3.4100  
##  NA's   :686

Ahora usando el nuevo data frame hacemos el gráfico otra vez

festivalHistogram <- ggplot(Festivalday1, aes(day1))
festivalHistogram + 
  geom_histogram(fill="orange", colour="white") + 
  labs(x = "Hygiene (Day 1 of Festival)", y = "Frequency")


Gráficos de caja box plots

Para crear un gráfico de caja se usa la función geom_boxplot(), si hay solamente un grupo en x se pone x=1 y en la y la variable continua.

festivalBoxplot <- ggplot(Festivalday1, aes(x=1,y=day1))
festivalBoxplot + geom_boxplot() + labs(x = "Gender", y = "Hygiene (Day 1 of Festival)")


Gráfico de caja por grupo

Para producir un gráfico de caja por multiples grupos en x se añade la variable categorica y en la y la variable continua. Si se quiere un color diferente por caja se usa la función color con el nombre en de la variable en x.

festivalBoxplot <- ggplot(Festivalday1, aes(x=gender,y=day2, colour=gender))
festivalBoxplot + 
  geom_point()+
  geom_boxplot(fill="yellow", alpha=0.1) + 
  labs(x = "Genero", y = "Higiene (Día 2 del Festival)")


Detección valores sesgados o átipicos.

En la función abajo denominado Valoressesgados uno puede determinar el porciento de valores que son sesgados. Note que aquí la función no existe y se construye una función para calcularlos porcentajes. Si selecionamos uno de las columnas, el dia 3 del concierto. Vemos que hay 4% de los valores que estén por fuera del intervalo de 95%, y 2.4% de los valores que estén por encima del intervalo de confianza de 99%.

Valoressesgados<-function(variable, digits = 2){
  
  zvariable<-(variable-mean(variable, na.rm = TRUE))/sd(variable, na.rm = TRUE)
  
  IC95<-abs(zvariable) >= 1.96  # error de 95%
  IC99<-abs(zvariable) >= 2.58   # error de 99%
  IC999<-abs(zvariable) >= 3.29  # error de 99.9%
  
  ncases<-length(na.omit(zvariable))
  
  percentaje95<-round(100*length(subset(IC95, IC95 == TRUE))/ncases, digits)
  percentaje99<-round(100*length(subset(IC99, IC99 == TRUE))/ncases, digits)
  percentaje999<-round(100*length(subset(IC999, IC999 == TRUE))/ncases, digits)
  
  cat("Valor absoluto z-score mayor de 1.96 = ", percentaje95, "%", "\n")
  cat("Valor absoluto z-score mayor de 2.58 = ",  percentaje99, "%", "\n")
  cat("Valor absoluto z-score mayor de 3.29 = ",  percentaje999, "%", "\n")
}

Valoressesgados(FD$day3)
## Valor absoluto z-score mayor de 1.96 =  4.07 % 
## Valor absoluto z-score mayor de 2.58 =  2.44 % 
## Valor absoluto z-score mayor de 3.29 =  0.81 %

Gráficos de línea y intervalo de errores

  • Learn how to reformat data in the correct type of data frame (as the original data set is not in the correct format) with the function “stack”
  • How to add the mean of the variable with “stat_summary”
  • How to connect the mean with a line and change color
  • How to add the error bars and color (The 95% confidence intervals, created with the stat_summary() function and the “mean_cl_boot” argument are bootstrap confidence intervals using the smean.cl.boot() function in Hmisc)

Installar la library(Hmisc)

library(Hmisc) # Se necesita este paquete para poner los intervalos de confianza

library(readr)
Hiccups <- read_csv("Data_files_csv/Hiccups.csv")
head(Hiccups, n=2)
## # A tibble: 2 × 4
##   Baseline Tongue Carotid Rectum
##      <dbl>  <dbl>   <dbl>  <dbl>
## 1       15      9       7      2
## 2       13     18       7      4

Es necesario re-organizar los datos, ya que las 4 diferentes variables están diferentes columnas, necesitamos que están todos los datos en una columna. Se usa la función stack. Subseguientemente, se asigna un nombre nuevo a las columnas

hiccups<-stack(Hiccups) # organizar los datos en dos columnas con la función **stack**


names(hiccups)=c("Num_Hiccups","Intervention") # Cambiar el nombre de las columnas

head(hiccups)
##   Num_Hiccups Intervention
## 1          15     Baseline
## 2          13     Baseline
## 3           9     Baseline
## 4           7     Baseline
## 5          11     Baseline
## 6          14     Baseline

La función stat_summary para calcular indices sumativos.

Nota aquí que el promedio, mean es añadido como un punto y que están uniido tambien por una linea, están añadido al eje de y con la función fun.y. Los intervalos de confianza se añaden con la función fun.data=mean_cl_boot y geom=“errorbar.

ggplot(hiccups, aes(y=Num_Hiccups,x=Intervention))+ 
  stat_summary(fun.y = "mean", geom = "point") + 
  stat_summary(fun.y = "mean", geom = "line", aes(group = 1),colour = "Red", linetype = "dashed") +      
  stat_summary(fun.data = mean_cl_boot, geom = "errorbar", width = 0.2, colour="blue") + 
  labs(x = "Intervention", y = "Mean Number of Hiccups")

Diagrama de tallo y hoja

Este diagrama demuestra la cantidad de datos usando el metodo sugerido por John Tukey

stem(Exam_Anxiety$Anxiety)
## 
##   The decimal point is 1 digit(s) to the right of the |
## 
##   0 | 0
##   0 | 
##   1 | 0
##   1 | 
##   2 | 0
##   2 | 7
##   3 | 
##   3 | 57
##   4 | 4
##   4 | 
##   5 | 113
##   5 | 79
##   6 | 1122444
##   6 | 5588999
##   7 | 00112222333334
##   7 | 5556666778899999
##   8 | 111111222222223344
##   8 | 555555556667889
##   9 | 00001112344
##   9 | 568
ggplot(Exam_Anxiety, aes(Anxiety))+
  geom_histogram()

Stem leaf for two groups

#library(aplpack)
#stem.leaf(co2)
#stem.leaf.backback(Exam_Anxiety$Anxiety[1:30],Exam_Anxiety$Anxiety[31:60])

Supuestos

Añadir los siguientes paquetes, Nota la función de pacman para intalar los paquetes. Esta función hace que si le falta un paquete en la lista lo va a instalar sin hacer tener que hacerlo uno por uno. Si quiere hacerlo separado remueve el # antes de install.packages

#----Install and Load Packages-----
#install.packages("car", dependencies = TRUE)
#install.packages("ggplot2")
#install.packages("pastecs")
#install.packages("psych")
if (!require("pacman")) install.packages("pacman")
pacman::p_load(car, pastecs, psych, ggplot2, ggversa, knitr, GGally, 
               tidyverse, kableExtra, reshape2, ggcorrplot, gridExtra)


# Activar los paquetes
library(ggversa) # un paquete con datos
library(knitr)
library(GGally)
library(tidyverse)
library(kableExtra)
library(reshape2)
library(ggcorrplot)
library(gridExtra)
library(car) # Companion to applied regression
library(ggplot2)  # Data Visualization
library(pastecs) # Space time Ecological Series
library(psych)   # Procedures for Psychological, psychometric and Personality Research

¿Qué son supuestos?

La ética en estadística basado en comprobar y cumplir con los supuestos de las pruebas estadística que se usan. La gran mayoría de las pruebas tradicional asume que los datos cumple con algunos supuestos, algunos típicos son.

  1. Distribución normal
  2. Igualdad de varianza = Homogeneidad de Varianza
  3. Simetría de las distribuciones
  4. Datos recolectado al azar

Cuando no se cumple con los supuestos estamos aumentando la probabilidad de tipo de error 1, es decir rechazar la hipótesis nula cuando se debería aceptar o tipo de error 2, cuando se debería aceptar la alterna cuando se debería rechazar.

Por consecuencia es primodial que cada investigador cumple con evaluar los supuestos de las pruebas que usa y si no cumple que busca métodos alternos. Por ejemplo se puede utilizar métodos de análisis no paramétrica, tambien estadística bayesiana o robusta o como alternativas.

En el siguiente modulo se habla de como asegurar que los datos cumple con los supuestos básico de las pruebas paramétricas que incluye t-test, ANOVA entre otros.

Note que aquí el énfasis en este modulo es de evaluar los supuestos con herramientas visual, hay herramientas estadística que son son disponible para cada una de estos supuestos. Vea la sección de estadística para estas alterativas para detalles más completos.


Homogeneidad de varianza

La homogeneidad de varianza es un supuesto primordial en el análisis de varianza (ANOVA) y sus vertientes. Este mismo supuesto es también importante en el análisis de regresión simple y multivariable; por ejemplo, en el análisis discriminante (discriminant function analysis en inglés). Utilizaremos los datos de la Becasa de Mar Limosa haemastica, un ave migrante de las costas de las marismas de Argentina, de la base de datos Godwits. Para determinar si la razón de adquisición de comida es diferente entre sexo, tiempo del año, y la combinación de estas dos variables (en otras palabras, las interacciones entre ambas), hay que asumir lo siguiente: 1ro. la varianza en las observaciones entre sexo es similar, 2do. la variación en las tres estaciones es similar, y 3ro. la variación entre los grupos por sexo es similar.


Gráficos de cajas condicionales

Para el ejemplo BecasaDeMar, se removieron algunos datos del análisis como se explica a continuación. En la variable SEX, hay tres categorías: 0 = sexo no identificado, 1 = hembra, y 2 = macho. Se removió la categoría de no identificado usando la siguiente función which:

BecasaDeMar=BecasaDeMar[-which(BecasaDeMar$SEX=={0}),]

Note aquí el - (el signo de resta) antes de which.

El siguiente paso, después de remover los individuos no identificados por sexo, es cambiar el nombre de los niveles 1 y 2 a hembra y macho respectivamente. Para evaluar la homogeneidad de varianza entre las estaciones también se le asigna el nombre del periodo: Verano, Pre-migración e Invierno.

Por ejemplo, con relación al supuesto de homogeneidad, en la figura se nota que hay un poco de variación en la varianza de ciertos grupos, pero en general no habría que preocuparse de una desigualdad como tal, aunque los 4 individuos identificados como puntos en la gráfica en el periodo de verano deberían ser evaluados con más detenimiento para asegurarse que los datos están correctos y que representen datos biológicamente posibles y no error en la toma de los datos o cuando se entraron en la hoja de datos.

Selección de los datos

BecasaDeMar=Godwits # en el paquete ggversa

head(BecasaDeMar)
##   RECORD DAY MONTH YEAR LOCATION AGE SEX PERIOD mgconsumed
## 1      1   5     1   97        0   0   0      0       0.07
## 2      2   5     1   97        0   0   0      0       0.16
## 3      3   5     1   97        0   0   0      0       0.25
## 4      4   5     1   97        0   0   0      0       0.07
## 5      5   5     1   97        0   0   0      0       0.14
## 6      6   5     1   97        0   0   0      0       0.26
BecasaDeMar=BecasaDeMar[-which(BecasaDeMar$SEX ==0),]

#unique(BecasaDeMar$SEX)


BecasaDeMar$fSEXO <- factor(BecasaDeMar$SEX,
            levels = c(1, 2),
            labels = c("Hembra", "Macho"))

unique(BecasaDeMar$fSEXO)
## [1] Hembra Macho 
## Levels: Hembra Macho
BecasaDeMar$fPERIODO <- factor(BecasaDeMar$PERIOD,
            levels = c(0, 1, 2),
            labels = c("Verano", "Pre-migración", "Invierno"))

 head(BecasaDeMar)           
##     RECORD DAY MONTH YEAR LOCATION AGE SEX PERIOD mgconsumed  fSEXO
## 125     53   2     4   97        1   1   1      1       0.07 Hembra
## 126     67  16     5   97        0   1   1      2       0.18 Hembra
## 127     69  16     5   97        0   1   1      2       0.39 Hembra
## 128     77  17     6   97        1   1   1      2       0.07 Hembra
## 129     78  17     6   97        1   1   1      2       0.10 Hembra
## 130     79  17     6   97        0   1   1      2       0.08 Hembra
##          fPERIODO
## 125 Pre-migración
## 126      Invierno
## 127      Invierno
## 128      Invierno
## 129      Invierno
## 130      Invierno
BecasaMar <- ggplot(BecasaDeMar,
                    aes(y=mgconsumed, x=fSEXO))


BecasaMar + geom_boxplot(notch=TRUE)+
            facet_wrap(~fPERIODO)+
  theme(axis.title=element_text(size=12,face="bold"),
        axis.text=element_text(size=12, face="bold"))+
            xlab("Sexo de las aves")+
            ylab("Razón de consumo")


Homogeneidad de varianza en modelos de regresión

Para el análisis de tipo regresión es necesario evaluar la homogeneidad de los datos utilizando los residuales del modelo. Esto lo logramos graficándolos contra los valores estimados (fitted values) y haciendo un gráfico de caja condicional con los residuales. Los residuales tienen que ser similares en todos los grupos. Si la variación de los residuales no es igual, será necesario transformar los datos o usar otras técnicas que no requieran del supuesto de la homogeneidad de varianza; por ejemplo, mínimos cuadrados generalizados (generalized least square, en inglés) o un análisis no paramétrico.

El gráfico que utilizaremos se llama caja condicional ya que la distribución es condicional al grupo. El residual se calcula como la diferencia entre el valor observado y el valor esperado; en este caso, en la variable de y.

A continuación, completamos el análisis utilizando otra vez los datos de la orquídea Dipodium. Primero hay que hacer un análisis de regresión simple usando lm() y darle un nombre al análisis o sea el modelo. Subseguientemente uno puede llamar los valores necesarios para hacer el gráfico con .fitted y .resid.

dipodium2=dipodium %>% 
  dplyr::select(Number_of_Flowers, Height_Inflo) %>% 
  drop_na()
head(dipodium2)
## # A tibble: 6 × 2
##   Number_of_Flowers Height_Inflo
##               <int>        <int>
## 1                11           35
## 2                19           47
## 3                18           63
## 4                24           47
## 5                25           61
## 6                17           35
modelflower=lm(Number_of_Flowers~Height_Inflo,
         data=dipodium2)

summary(modelflower)
## 
## Call:
## lm(formula = Number_of_Flowers ~ Height_Inflo, data = dipodium2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -12.7346  -2.4391  -0.0868   2.2087  14.3221 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -2.19668    1.24384  -1.766   0.0791 .  
## Height_Inflo  0.45074    0.02368  19.038   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.266 on 179 degrees of freedom
## Multiple R-squared:  0.6694, Adjusted R-squared:  0.6676 
## F-statistic: 362.5 on 1 and 179 DF,  p-value: < 2.2e-16
plot(modelflower)

ggplot(dipodium2, aes(Height_Inflo, Number_of_Flowers))+
  geom_smooth(method=lm)+
  geom_point()

#influence(modelflower)
#rstandard(modelflower)
#influence.measures(modelflower)
#head(fortify(modelflower))

Lo que observaremos es que la distribución de los residuales luce más o menos uniforme alrededor del promedio de los residuales (el cero). Hay aproximadamente igual cantidad de valores mayor a cero (por encima de la línea en verde) y menor a cero (por debajo de la línea en verde) que están distribuidos a través de la variable en el eje de X, o valores estimados. En adición que los residuales (negativos o positivos) no son limitado a sub grupos de de los valores estimados (en la X).

Note que se está aplicando el modelo modelflower, y se usan los valores calculados en el modelo .fitted y .resid para producir el gráfico. Se añade una linea horizontal para identificar el modelo nulo con geom_hline.

  res<-ggplot(modelflower, aes(.fitted, .resid))+
  geom_point()+
  geom_hline(yintercept=0,
           col="red", linetype="dashed")+
  theme(axis.title=element_text(size=20,face="bold"),
        axis.text=element_text(size=20, face="bold"))+
  xlab("Valores estimados")+
           ylab("Residuales")+
  ggtitle("Residuales vs. Valores Estimados")
res


Los residuales de Student para detectar valores sesgados

A continuación se ilustra otro enfoque para evaluar los residuales. En este caso, para detectar valores sesgados (outliers). Se puede visualizar los residuales se usa los residuales estandarizados divido por la desviación estándar. Valores mayores de 3 serian considerados sesgados. Esta alternativa es apropiada si detectar valores sesgados. Note en la figura que se usa otra vez el modelo modelflower y los valores calculados en el modelo .fitted y los residuales de student con .stdresid. Note ahora también que todos los valores en el eje de Y son mayores de cero.

  ResEst=ggplot(modelflower,
                 aes(.fitted, sqrt(abs(.stdresid)))) +
                 geom_point(na.rm=TRUE)+
  theme(axis.title=element_text(size=20,face="bold"),
        axis.text=element_text(size=20, face="bold"))+
          xlab("Valores estimados")+
          ylab("Residuales estandarizados \n de Student")+
  ggtitle("Residuales vs. Valores Estimados")
ResEst


Valores sesgados con la Distancia de Cook, Di

Continuando con el tema de evaluar si hay valores que podrían influenciar mucho el análisis, podemos utilizar una de las herramientas para evaluar el peso de cada valor sobre una regresión lineal basada en métodos de los mínimos cuadrados, llamada la Distancia de Cook. Este análisis fue desarrollado por R. Dennis Cook en 1977 y tiene como objetivo evaluar cada valor en la matriz de datos y el peso que tiene sobre el resultado (cuando esté este incluido o no en el análisis). Produce un índice para cada uno de los valores sobre el resultado basándose en los valores residuales que se llama la Distancia de Cook. Por lo tanto, ese análisis evalúa el impacto relativo de cada valor sobre el índice. Infortunadamente no está claro cuál es el valor crítico; o sea, qué valor nos puede indicar que se tiene exceso de peso sobre los resultados. Las dos principales sugerencias son: Distancia de Cook, Di, es mayor a 1 (sugerido por R. Dennis Cook Cook mismo en 1982); y que la Di > 4/n, donde n es el número de observaciones (Bollen et al. 1990).

Para hacer una ilustración, continuaremos con el modelo modelflower usando los valores calculados en el modelo anterior. El gráfico se construirá utilizando la opción seq_along, para que los valores en el eje de X se basen en la secuencia de datos en el archivo y los valores en el eje de Y se basen en los valores de la Distancia de Cook. En este caso, vemos que todos los valores están muy por debajo de 1, lo que sugiere que ninguno de los valores individuales influenciaría mucho en los resultados aún si estos fuesen excluidos. Si utilizáramos la segunda alternativa de Di > 4/n, entonces nos deberían preocupar los 8 valores de Di que son mayores a 4/181=0.022, donde 181 es la cantidad de datos en el archivo. Si se considera esta segunda alternativa, sería necesario evaluar 8 valores en la tabla de datos que pudiesen ser sospechosos (los valores encima de la línea roja). Note que no es que están incorrectos; más bien, este resultado es solamente una herramienta para evaluar valores que parecen tener un impacto considerable sobre los resultados.

  ggplot(modelflower,
        aes(seq_along(.cooksd), .cooksd))+
        geom_bar(stat="identity",
        position="identity", fill="steelblue")+
  geom_hline(yintercept =0.022, colour="red")+
  theme(axis.title=element_text(size=20,face="bold"),
        axis.text=element_text(size=20, face="bold"))+
        xlab("La secuencia de las observaciones")+
        ylab("Distancia de Cook")+
        ggtitle("Distancia de Cook")


Causas principales de los valores sesgados

Los valores que parecen sesgados pueden ser normal de la población estudiada, y por consecuencia en estos casos remoción de estos valores podría resultar en descripción de los resultados incorrectos. Primero hay que evaluar los siguientes posibles causas de valores sesgados. Si algunos de los siguientes son presentes hay que resolver los valores o remover los de la hoja de análisis.

  • los valores recolectado son erróneo.
  • los valores fueron entrado incorrectamente en la hoja de datos
  • los valores recolectado tienen diferente dimensiones, por ejemplo algunos fueron recolectados en cm y otros en mm para la misma variable.

Supuesto de normalidad

Hay muchas pruebas estadísticas que asumen que los datos provienen de una distribución normal. Pero no todas las pruebas tienen que satisfacer ese supuesto. Por ejemplo, un Análisis de Componentes Principales o ACP (en inglés, PCA o Principle Component Analysis) o la prueba de t asumen distribución normal. Por el contrario, las pruebas no paramétricas como Wilcoxon, Mann-Whitney, Kruskall Wallis y otras no asumen ese supuesto.

Una alternativa tradicional para comprobar la normalidad de los datos es mirar el gráfico de QQ; o sea, una visualización para comparar las probabilidades de dos variables en las que se gráfica los cuartiles (recordemos que Q viene de cuartil). Si las distribuciones de las dos variables son similares, los puntos aparecerán nítidamente en el gráfico de QQ sobre la línea de X-Y. Eso se demostrará a continuación.


qplot

En el gráfico se representa el consumo por la Becasa de Mar de la base de datos Godwits, el ave de las marismas de Argentina que hemos analizado anteriormente. En el gráfico se nota que los datos a los extremos no están muy cerca de la línea X-Y, lo que sugiere que el consumo por la Becasa de Mar no tiene una distribución normal. La función qplot es la manera más sencilla para generar el gráfico de QQ.

# Note que anteriormente ya habíamos depositado los datos en el data.frame BecasaDeMar
ggplot(BecasaDeMar, aes(sample=mgconsumed))+
  geom_qq()+
  geom_qq_line()+
  theme(axis.title=element_text(size=20,face="bold"),
        axis.text = element_text(size=20,face="bold"))+
   xlab("Valores teóricos")+
   ylab("Valores observados")


geom_qq y geom_qq_line

A pesar de lo fácil de este enfoque, apreciar si los datos quedan nítidamente alineados sobre una línea no es tan evidente en algunos casos. Por lo tanto, en la siguiente versión del gráfico de QQ producida con la función geom_qq y geom_qq_line se le añade una línea para mostrar dónde debería estar localizada la gran mayoría de los datos si estos tuvieran una distribución normal. Ahora vemos que claramente muchos de los datos no yacen en la línea. Evidentemente, el trazar la línea teórica ayuda a visualizar la conclusión; en este caso, se podría concluir que el consumo de comida por este pájaro no sigue una distribución normal la linea azul. En el segundo ejemplo se crea un archivo de datos que tiene una distribución normal y esta ejemplo la gran mayoría de los datos solapen la linea, la linea roja

a= ggplot(Godwits, aes(sample = mgconsumed)) +
  stat_qq() +
  stat_qq_line(colour="blue")+
  xlab("Valores teóricos")+
  ylab("Valores observados")


df <- data.frame(y = rnorm(2000))
b <- ggplot(df, aes(sample = y))+ 
  stat_qq() + 
  stat_qq_line(colour="red")

grid.arrange(a,b,ncol=2)


La distribución normal

Una segunda alternativa para visualizar si los datos siguen una distribución normal es construir un histograma de los datos y gráficar sobre este la curva normal basándonos en el promedio y la desviación estándar de los mismos datos. Para construir el histograma se usa la función geom_histogram y para la distribución teórica normal de estos datos se usa la función stat_function. Esto lo demostramos con gráficos adicionales de la Becasa del Mar, donde se representa la razón de consumo y el período en que esto ocurrió. En la Figura (a) vemos la distribución para todos los períodos, y los otros tres en la Figura (b) muestran una distribución para cada uno de los períodos. Se observa en todos los casos que las distribuciones están sesgadas hacia los valores pequeños (hacia la izquierda). Esta visualización nos ayuda a evaluar la normalidad de esos datos. NOta que no es una prueba estadística igual como el gráfico de qqplot.

Nota la formula para calcular la distribución normal. Hay solamente dos parámetros que necesitamos, el promedio \(\mu\) y la desviación estándar \(\sigma\). Todos los otros son constantes, \(\pi\), y e.

\[P(x)=\frac{1}{{\sigma\sqrt{ 2\pi}}}{e}^{-\frac{{(x-µ)}^{2}}{{2\sigma}^{2}}}\]

Note que en geom_histogram se tiene que incluir

aes(..density..)

y añadir dentro de la función stat_function todo lo siguiente:

stat_function(fun = dnorm, args = list(mean = mean(Godwits\(mgconsumed, na.rm = TRUE), sd = sd(Godwits\)mgconsumed, na.rm = TRUE)), colour = “red”, size = 1)

El parámetro dnorm quiere decir densidad de la distribución normal. También se necesitan dos parámetros para calcular el promedio (mean) y la desviación estándar (sd). Con ambos hay que especificar de dónde provienen los datos; en este caso,

Godwits$mgconsumed

Además, si hay NA en los datos, hay que añadir na.rm = TRUE para excluir los NA. Veamos.

a=ggplot(Godwits, aes(mgconsumed)) +
  theme(legend.position = "none") +
  geom_histogram(aes(y=..density..),
                 colour="black", fill="white")+
  theme(axis.title=element_text(size=12,face="bold"),
        axis.text = element_text(size=12,face="bold"))+
  labs(x = "Razón de Consumo", y = "Densidad") +
  stat_function(fun = dnorm,
        args = list(mean = mean(Godwits$mgconsumed,
                                na.rm = TRUE),
    sd = sd(Godwits$mgconsumed,na.rm = TRUE)),
    colour = "red", size = 1)+
  ggtitle("Todos los datos")





b= ggplot(Godwits, aes(mgconsumed)) +
  theme(legend.position = "none") +
  geom_histogram(aes(y=..density..),
                 colour="black", fill="white")+
  theme(axis.title=element_text(size=12,face="bold"),
        axis.text = element_text(size=12,face="bold"))+
  labs(x = "Razón de Consumo", y = "Densidad") +
  stat_function(fun = dnorm, args = list(mean =
    mean(Godwits$mgconsumed, na.rm = TRUE),
    sd = sd(Godwits$mgconsumed, na.rm = TRUE)),
    colour = "red", size = 1)+
    facet_wrap(~PERIOD)+
  ggtitle("Por estación anual")

grid.arrange(a,b,ncol=1)


stat_function

Continuaremos con este mismo análisis pero esta vez evaluaremos la distribución del peso de gorriones en un trabajo de captura y recaptura en 6 meses diferentes. Utilizaremos la base de datos SparrowsElphick. En la figura (a) observamos un histograma de la distribución de los pesos de estas aves por cada mes. Vemos claramente que hay meses (mayo, septiembre y octubre) en los que se tuvieron muchas menos observaciones. En el segundo gráfico, Figura (b), observamos el histograma y la curva normal para todos los datos sin importar el mes. Igualmente, esta visualización nos ayuda a evaluar la normalidad de los datos.

Sparrows=SparrowsElphick

Sparrows$fMonth<-factor(Sparrows$Month,
             levels = c(5, 6, 7, 8, 9, 10),
             labels = c("Mayo", "Junio", "Julio", "Agosto",
                                   "Sept.", "Oct."))

a=ggplot(Sparrows, aes(wt))+
  geom_histogram(binwidth=1, colour="white")+
  facet_wrap(~fMonth)+
  theme(axis.title=element_text(size=12,face="bold"),
        axis.text = element_text(size=12,face="bold"))+
  xlab("Peso")+
  ylab("Frecuencia")

b=ggplot(Sparrows, aes(wt)) +
  theme(legend.position = "none")+
  theme(axis.title=element_text(size=12,face="bold"),
        axis.text = element_text(size=12,face="bold"))+
  geom_histogram(aes(y=..density..), colour="black",
                 fill="white") +
  labs(x = "Peso", y = "Densidad") +
  stat_function(fun = dnorm, 
                args = list(mean = mean(Sparrows$wt, na.rm = TRUE),
                            sd = sd(Sparrows$wt, na.rm = TRUE)),
                            colour = "red", size = 1)

grid.arrange(a,b,ncol=2)


Visualizando la distribuciones con geom_density

A continuación se muestra otra alternativa para observar los datos anteriores. Nada más que estos ahora se representan sustituyendo las funciones geom_histogram y stat_function por geom_density para la construcción de curvas de densidad. Otra vez utilizaremos la base de datos SparrowsElphick. La curva normal que se genera es tipo gausiana (gaussian en inglés). Nóte que para el segundo conjunto de gráficos, (b), no se le especificó la opción en kernel igual a gaussian ya que de forma predeterminada la función geom_density usa el parámetro gaussian; o sea, no es necesario especificarla si eso es lo que se quiere. Una distribución en donde el pico es más alto significa que hay mayor densidad de datos en esa región de la variable en el eje de X. Podemos apreciar que la curva de densidad no sigue claramente una distribución normal con respecto a los valores en X.

# Note que anteriormente ya habíamos depositado los datos en el data.frame Sparrows:
a= ggplot(Sparrows, aes(wt))+
geom_density(aes(group=fMonth, fill=fMonth),
             kernel="gaussian")+
  facet_wrap(~fMonth)+
  guides(fill=FALSE)+
  theme(axis.title=element_text(size=12,face="bold"),
        axis.text=element_text(size=12, face="bold"))+
  ylab("Densidad")+
  xlab("Peso")

b= ggplot(Sparrows, aes(wt))+
  geom_density(aes(group=fMonth,
                   fill=fMonth),
               alpha=.4)+
  scale_color_discrete()+
  theme(axis.title=element_text(size=12,face="bold"),
        axis.text=element_text(size=12, face="bold"))+
  ylab("Densidad")+
  xlab("Peso")+
  labs(colour="Mes")

grid.arrange(a,b,ncol=1)


Colinealidad entre covariables con ggpairs

Hoy en día la cantidad de datos que se obtienen en diferentes estudios puede ser muy impresionante. Muchas veces el objetivo es detectar si unas variables, entre muchas otras, podrían predecir la variable de respuesta. A consecuencia de eso, el problema mayor es tomar en cuenta la colinealidad entre variables explicativas. La colinealidad es simplemente la correlación entre variables en un modelo de análisis de regresión múltiple, en donde las variables predictivas están altamente correlacionadas.

Un ejemplo sencillo de variables con colinealidad podría incluir la relación entre el largo y ancho de las hojas de una herbácea y cómo estas están correlacionadas con la producción de flores. Es probable que la correlación entre el largo y el ancho de la hoja estén correlacionadas con la producción de las flores de formas muy similares; o sea, con una pendiente que explicaría ambas relaciones de formas similares. Entonces, al añadir ambas variables al modelo de regresión múltiple, no estaríamos explicando variaciones distintas, si no más bien la misma variación. Cuando hay mucha colinealidad entre variables explicativas, se debería seleccionar un subgrupo de estas variables que expliquen variaciones distintas para el modelo y no incluir todas las variables.

A continuación exploraremos diferentes alternativas para llevar a cabo este tipo de análisis utilizando otra vez los datos de la orquídea Dipodium. En el primer ejemplo, se utiliza la función cor para evaluar solo una relación: la correlación entre la distancia de la planta a un árbol y la altura de la planta, dejando otras variables a un lado. Como deseamos el estimado de la correlación solamente, utilizamos un par de variables a la vez para evaluar la correlación entre la distancia de la orquídea al árbol y la altura de la inflorescencia (mostrado más adelante). Concluimos que a mayor distancia del árbol, menor es la altura de la inflorescencia al este análisis arrojar un valor de pendiente de -0.095 como se muestra en el ejemplo.

cor(dipodium$Distance, 
    dipodium$Height_Inflo,
    use="pairwise.complete.obs")
## [1] -0.09541256

Otra alternativa es hacer el análisis de correlación de muchas variables en conjunto. En la tabla, Correlaciones de Pearson, se muestra la correlación entre las tres variables siguientes: DBH, cantidad de flores y altura de la inflorescencia. En esa tabla se observa la correlación de Pearson para estos datos. Recordemos que esta correlación asume distribución normal.

kable(signif(cor(dipodium[,c(3, 8, 9)],
 use="pairwise.complete.obs"),2))
DBH Number_of_Flowers Height_Inflo
DBH 1.000 -0.035 -0.10
Number_of_Flowers -0.035 1.000 0.82
Height_Inflo -0.100 0.820 1.00

Tabla de correlación de Kendall

Usando la función cor se puede también calcular estimados de correlación sin asumir distribución normal usando los métodos Kendall o Spearman mostrados en la Tabla siguiente.

kable(signif(cor(dipodium[,c(3, 8, 9)],
 method="kendall",
 use="pairwise.complete.obs"),2), 
 caption =
  "\\label{fig:CK}Correlaciones de Kendall")
Correlaciones de Kendall
DBH Number_of_Flowers Height_Inflo
DBH 1.00000 0.00085 -0.059
Number_of_Flowers 0.00085 1.00000 0.650
Height_Inflo -0.05900 0.65000 1.000

Tabla de correlación de Spearman

kable(signif(cor(dipodium[,c(3, 8, 9)],
 method="spearman",
 use="pairwise.complete.obs"),1))
DBH Number_of_Flowers Height_Inflo
DBH 1.000 -0.002 -0.08
Number_of_Flowers -0.002 1.000 0.80
Height_Inflo -0.080 0.800 1.00

En esas tres tablas podemos apreciar un patrón consistente entre todos los métodos; o sea, la altura de la inflorescencia está altamente correlacionada con la cantidad de flores (con coeficientes de correlación de 0.82, 0.65, y 0.81 respectivamente). Note que para facilitar la lectura de los valores, se usó la función signif para así identificar solamente los valores significativos del análisis.

Brevemente recapitulamos, si los datos no siguen una distribución normal, se deberían utilizar los métodos Kendall o Spearman. Si se tienen pocos datos, Kendall tiende a ser una mejor alternativa para determinar el indice de correlación. Se le advierte, sin embargo, que consulte libros de estadística sobre este tema antes que realice un análisis de este tipo ya que la decisión de seleccionar una alternativa sobre otra no es tan sencilla.


Seleción de parámetros para correlaciones cuando hay NA

Además, los analísis anteriores utilizados emplearon el parámetro pairwise.complete.obs, ya que obviaría los NA en las columnas que se utilizan para calcular la correlación. Por lo tanto, la cantidad de pares de datos utilizados para calcular las diferentes correlaciones entre variables puede variar si hay NA en el archivo. Tome en consideración que hay otras cuatro alternativas para analizar los datos cuando tenemos NA presentes: everything, all.obs, complete.obs y na.or.complete. No vamos a discutir esas alternativas en el presente libro. Sería bueno que busque información en R para sus usos. Estas alternativas se discutiran en otros modulos.

Finalmente, también se utilizó el comando kable ya que es una manera efectiva de organizar los resultados en una tabla.


Uso de GGally para ver correlaciones

Continuando con el mismo tema, una tercera opción para descubrir la colinealidad entre covariables es utilizar el paquete GGally, ya que no solamente nos calcula las correlaciones, si no que también nos permite hacer los gráficos de densidad de la distribución de las variables y un gráfico de dispersión por pares de variables evaluadas.

En los gráficos de la siguiente Figura observamos los coeficientes de correlación, la distribución de los datos y la visualización de correlación por cada par. Además, vemos el diagrama de caja de los datos cuando hay variables discretas. Note al extremo derecho que la variable Herbivory tiene una categoría no identificada, que incluye los NA.

Con la función de ggpairs podemos calcular las correlaciones entre las variables y a la misma vez producir todos los gráficos entre las variables y gráficos de distribución de densidad de cada variable. En el gráfico podemos observar en la parte izquierda la distribución de los datos en pares. En la diagonal se observa la densidad de cada una de las variables. En la parte superior derecha se observa el valor de correlación y en el extremo derecho se observan los diagramas de caja de las variables discretas con relación a la variable de la izquierda. Este gráfico es sumamente práctico, ya que produce mucha información con pocos pasos. Desafortunadamente, no hay manera de remover los NA al presente. A consecuencia de esto, al extremo derecho uno observa en las cajas abajo una barra con muchos valores (la de la derecha), pero esta representa todos los valores NA en la tabla de datos. En este caso, la presencia de herbivoria en las plantas no fue recolectada y en cambio se dejó con un NA. Note que aquí no se pueden poner ceros u otros valores. Las alternativas podrían ser H para evidenciar la presencia de herbaria y n para las plantas donde no hay evidencia de herbivoría.

names(dipodium) # para ver los nombres de las variables/columnas
##  [1] "Tree Number"             "Tree species"           
##  [3] "DBH"                     "Plant number"           
##  [5] "Ramet number"            "Distance"               
##  [7] "Orientation"             "Number_of_Flowers"      
##  [9] "Height_Inflo"            "Herbivory"              
## [11] "RowPosition_NF"          "Number_Flowers_position"
## [13] "Number_of_fruits"        "Perc_FR_set"            
## [15] "pardalinum_or_roseum"    "Fruit_position_effect"  
## [17] "Frutos_si_o_no"          "P_or_R_Infl_Lenght"     
## [19] "Num of fruits"           "Species_Name"           
## [21] "Cardinal orientation"
ggpairs(dipodium[,c(8, 9, 13, 14, 10)])


Nombre del capitulo.

All chapters start with a first-level heading followed by your chapter title, like the line above. There should be only one first-level heading (#) per .Rmd file.

A section

Otra seccion

All chapter sections start with a second-level (##) or higher heading followed by your section title, like the sections above and below here. You can have as many as you want within a chapter.

A subsection

The subtopic

More subdivision

Even more subdivision

An unnumbered section

Chapters and sections are numbered by default. To un-number a heading, add a {.unnumbered} or the shorter {-} at the end of the heading, like in this section.

Remember not to use only 1 # as this indicates a new chapter

NOTE the size of font changes with the number #

NOTE the size of font changes with the number #

NOTE the size of font changes with the number #

NOTE the size of font changes with the number #

Don’t miss Table @ref(tab:nice-table).

Cross-references

Cross-references make it easier for your readers to find and link to elements in your book.

Chapters and sub-chapters

There are two steps to cross-reference any heading:

  1. Label the heading: # Hello world {#nice-label}.

    • Leave the label off if you like the automated heading generated based on your heading title: for example, # Hello world = # Hello world {#hello-world}.

    • To label an un-numbered heading, use: # Hello world {-#nice-label} or {# Hello world .unnumbered}.

  2. Next, reference the labeled heading anywhere in the text using \@ref(nice-label); for example, please see Chapter @ref(intro).


Captioned figures and tables

Figures and tables with captions can also be cross-referenced from elsewhere in your book using \@ref(fig:chunk-label) and \@ref(tab:chunk-label), respectively.

See Figure @ref(fig:nice-fig).

par(mar = c(4, 4, .1, .1))
plot(pressure, type = 'b', pch = 19)
Here is a nice figure!

Here is a nice figure!

Don’t miss Table @ref(tab:nice-table).

knitr::kable(
  head(pressure, 10), caption = 'Here is a nice table!',
  booktabs = TRUE
)
Here is a nice table!
temperature pressure
0 0.0002
20 0.0012
40 0.0060
60 0.0300
80 0.0900
100 0.2700
120 0.7500
140 1.8500
160 4.2000
180 8.8000

(Appendix) List of epiphyitc species

You can add parts to organize one or more book chapters together. Parts can be inserted at the top of an .Rmd file, before the first-level chapter heading in that same file.

Add a numbered part: # (PART) Act one {-} (followed by # A chapter)

Add an unnumbered part: # (PART\*) Act two {-} (followed by # A chapter)

Add an appendix as a special kind of un-numbered part: # (APPENDIX) Other stuff {-} (followed by # A chapter). Chapters in an appendix are prepended with letters instead of numbers.

(Appendix) List of terrestrial species

Footnotes and citations

Footnotes

Footnotes are put inside the square brackets after a caret ^[]. Like this one 1.

Let’s add a second footnote. In this case we add information on the origin of matrix algebra 2

Mi tercer footnote es filosofico 3

Citations

Reference items in your bibliography file(s) using @key.

For example, we are using the bookdown package (Xie 2023) (check out the last code chunk in index.Rmd to see how this citation key was added) in this sample book, which was built on top of R Markdown and knitr (Xie 2015) (this citation was added manually in an external file book.bib). Note that the .bib files need to be listed in the index.Rmd with the YAML bibliography key.

Here is second citation.

Evolutionary processes in orchids are likely to be a interaction between natural selection and genetic drift (Tremblay et al. 2005).

Here is a third citation

un articulo de Damon excepcional (Damon 2000)

Blocks

Equations

Here is an equation.

\[\begin{equation} f\left(k\right) = \binom{n}{k} p^k\left(1-p\right)^{n-k} (\#eq:binom) \end{equation}\]

You may refer to using \@ref(eq:binom), like see Equation @ref(eq:binom).

– this is the script to make the equation connectable in the text

** that the .... are to make the text visual

Theorems and proofs

Labeled theorems can be referenced in text using \@ref(thm:tri), for example, check out this smart theorem @ref(thm:tri).

::: {.theorem #tri} For a right triangle, if \(c\) denotes the length of the hypotenuse and \(a\) and \(b\) denote the lengths of the other two sides, we have \[a^2 + b^2 = c^2\]

A site to help create your equations \[\bar{x}=\frac{\sum x_{i}}{n}\]

https://latex.codecogs.com/eqneditor/editor.php

Ahora se enseña la formula del promedio @ref(thm:promedio)

\[\bar{x}= \frac{\sum x_{i}}{n}\]

Si quiere la ecuación en la linea usa solamente un “$” antes y despues de la formula. El promedio tiene la siguiente formula \(\bar{x}= \frac{\sum x_{i}}{n}\) y la varianza se estima tomando la diferencia entre los valores y el promedio.

Read more here https://bookdown.org/yihui/bookdown/markdown-extensions-by-bookdown.html.


Callout blocks

The R Markdown Cookbook provides more help on how to use custom blocks to design your own callouts: https://bookdown.org/yihui/rmarkdown-cookbook/custom-blocks.html

Sharing your book

Publishing

HTML books can be published online, see: https://bookdown.org/yihui/bookdown/publishing.html

404 pages

By default, users will be directed to a 404 page if they try to access a webpage that cannot be found. If you’d like to customize your 404 page instead of using the default, you may add either a _404.Rmd or _404.md file to your project root and use code and/or Markdown syntax.

Metadata for sharing

Bookdown HTML books will provide HTML metadata for social sharing on platforms like Twitter, Facebook, and LinkedIn, using information you provide in the index.Rmd YAML. To setup, set the url for your book and the path to your cover-image file. Your book’s title and description are also used.

This gitbook uses the same social sharing data across all chapters in your book- all links shared will look the same.

Specify your book’s source repository on GitHub using the edit key under the configuration options in the _output.yml file, which allows users to suggest an edit by linking to a chapter’s source file.

Read more about the features of this output format here:

https://pkgs.rstudio.com/bookdown/reference/gitbook.html

Or use:

?bookdown::gitbook

References

Damon, Anne. 2000. “A Review of the Biology and Control of the Coffee Berry Borer, Hypothenemus Hampei (Coleoptera: Scolytidae).” Bulletin of Entomological Research 90 (6): 453–65.
Tremblay, Raymond L, James D Ackerman, Jess K Zimmerman, and Ricardo N Calvo. 2005. “Variation in Sexual Reproduction in Orchids and Its Evolutionary Consequences: A Spasmodic Journey to Diversification.” Biological Journal of the Linnean Society 84 (1): 1–54.
Xie, Yihui. 2015. Dynamic Documents with R and Knitr. 2nd ed. Boca Raton, Florida: Chapman; Hall/CRC. http://yihui.org/knitr/.
———. 2023. Bookdown: Authoring Books and Technical Documents with r Markdown. https://CRAN.R-project.org/package=bookdown.

  1. This is a footnote.↩︎

  2. The term matrix was introduced by the 19th-century English mathematician James Sylvester, but it was his friend the mathematician Arthur Cayley who developed the algebraic aspect of matrices in two papers in the 1850s. ↩︎

  3. kgjljgljhggjlhgjhgljgjhl↩︎